好吧,假设我们有4列和3行数据。
|user_id|pick_1|pick_2|pick_3|
-------------------------------
|fred |C++ |java | php |
------------------------------
|eric |java |C++ | php |
------------------------------
|sam | C++ | php | java |
------------------------------
所以现在,用户正在输入他们最喜欢的语言。第一选择(pick_1)将是喜爱的编程语言,而第二选择(pick2)将是第二喜爱的程序语言等等
我如何组织它,以便根据编程语言的列给出一个点值。所以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。
感谢您的阅读。
您需要一个更简单的结构
User_ID | Pick | Points
Fred c++ 3
Fred php 2
Fred java 1
通过这种方式,您可以执行简单的sum(points) group by pick
对于仅SQL的解决方案,我会规范化您的结构,并将pick放在不同的表中:
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
正如在这个小提琴
这样也很容易添加限制,这样人们就不能对一种语言进行多次投票,或者对两种不同的语言进行相同数量的投票。