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

|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个点。
这样,我可以给出一个总体排名,什么往往是更有利的编程语言。像这样
  |rank|language|points|
  ----------------------
  |  1 |  C++   | 8    |
  ----------------------
  |  2 |  java  | 6    |
  ----------------------
  |  3 |  php   | 4    |
  ----------------------

它甚至不需要一个积分系统,我只是想不出另一种方法来将语言按喜欢到不喜欢的程度排列。所以如果有其他方法可以得到相同的结果,请告诉我。否则我怎么能做到。最好是在MySql中。我目前正在使用PHP。
谢谢你的阅读。

最佳答案

对于仅限SQL的解决方案,我将规范化您的结构,并将选择放在不同的表中:

users: user_id; user_name
picks: pick_id; user_id; language; points;

然后将数据放在两个表中:
| 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         |
---------------------------------------------

然后使用以下查询获取所需的结果:
SELECT language, SUM(points) FROM users JOIN picks ON users.user_id=picks.user_id GROUP BY language

this fiddle
这样也很容易添加限制,这样人们就不能再为一种语言投票一次,或者给两种不同的语言投相同的票数。

关于php - 有没有一种方法可以根据值所属的列对MySql中的值进行排序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18629865/

10-11 03:09
查看更多