好的,假设我们有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。
感谢您的阅读。
发布于 2013-09-05 07:35:33
对于只有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如这把小提琴所示
这样也很容易增加限制,所以人们不能投票给一种语言超过一次,或给予相同数量的选票给两种不同的语言。
发布于 2013-09-05 07:15:59
你需要一个更简单的结构
User_ID | Pick | Points
Fred c++ 3
Fred php 2
Fred java 1这样你就可以做一个简单的sum(points) group by pick
https://stackoverflow.com/questions/18629865
复制相似问题