2

好的,假设我们有 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。

感谢您的阅读。

4

2 回答 2

3

你需要一个更简单的结构

User_ID | Pick | Points
Fred      c++     3
Fred      php     2
Fred      java    1

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

于 2013-09-05T07:15:59.520 回答
1

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

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

那么您的数据将保存在 2 个表中:

| 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-05T07:35:33.283 回答