好吧,假设我们有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/