首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有一种方法可以根据MySql中属于哪一列对值进行排序?

是否有一种方法可以根据MySql中属于哪一列对值进行排序?
EN

Stack Overflow用户
提问于 2013-09-05 07:05:53
回答 2查看 146关注 0票数 2

好的,假设我们有4列和3行数据。

代码语言:javascript
复制
|user_id|pick_1|pick_2|pick_3|
-------------------------------
|fred   |C++   |java  | php  |
------------------------------
|eric   |java  |C++   | php   |
------------------------------
|sam    | C++  | php  | java |
------------------------------

所以现在,用户正在输入他们最喜欢的语言。第一个选择(Pick_1)将是最喜欢的编程语言,第二个选择(pick_2)将是第二个最喜欢的编程语言等等。

我如何以一种方式来组织它,这样我就可以根据编程语言是什么列来给出一个点值。因此,pick_1可以给出3分,pick_2可以给出2分,pick_3可以给出1分。

因此,当你把分数加起来时,C++将得到8分,java将得到6分,php将得到4分。

这样,我就可以给出更好的编程语言的总体排名。就像这样

代码语言:javascript
复制
  |rank|language|points|
  ----------------------
  |  1 |  C++   | 8    |
  ----------------------
  |  2 |  java  | 6    |
  ----------------------
  |  3 |  php   | 4    |
  ----------------------

它甚至不需要有一个分数系统,我只是想不出另一种方法来将语言按喜欢和不喜欢的比例排列。所以,如果有其他方法产生同样的结果,请告诉我。否则我怎么能做到这一点。最好是在MySql。我目前正在使用PHP。

感谢您的阅读。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-05 07:35:33

对于只有SQL的解决方案,我会将您的结构规范化,并将选择放在另一个表中:

代码语言:javascript
复制
users: user_id; user_name
picks: pick_id; user_id; language; points;

然后,您将在两个表中获得数据:

代码语言:javascript
复制
| user_id | user_name |
-----------------------
| 1       | Fred      |
-----------------------
| 2       | Eric      |
-----------------------
| 3       | Sam       |
-----------------------

| pick_id | user_id   | language | points    |
---------------------------------------------
| 1       | 1         | C++      | 1         |
---------------------------------------------
| 2       | 1         | Java     | 2         |
---------------------------------------------
| 3       | 1         | php      | 3         |
---------------------------------------------
| 4       | 2         | Java     | 1         |
---------------------------------------------
| 5       | 2         | C++      | 2         |
---------------------------------------------
| 6       | 2         | php      | 3         |
---------------------------------------------
| 7       | 3         | C++      | 1         |
---------------------------------------------
| 8       | 3         | Java     | 2         |
---------------------------------------------
| 9       | 3         | php      | 3         |
---------------------------------------------

然后使用以下查询获取所需的结果:

代码语言:javascript
复制
SELECT language, SUM(points) FROM users JOIN picks ON users.user_id=picks.user_id GROUP BY language

这把小提琴所示

这样也很容易增加限制,所以人们不能投票给一种语言超过一次,或给予相同数量的选票给两种不同的语言。

票数 1
EN

Stack Overflow用户

发布于 2013-09-05 07:15:59

你需要一个更简单的结构

代码语言:javascript
复制
User_ID | Pick | Points
Fred      c++     3
Fred      php     2
Fred      java    1

这样你就可以做一个简单的sum(points) group by pick

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18629865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档