排名中的不同逻辑

时间:2014-01-28 12:47:10

标签: php mysql logic

我必须为我的排名场景找到解决方案。

假设我在数据库中有100个用户。另一张表中有5个主题。在我的项目中,用户可以选择对任何科目评分1到5分。意味着用户应对5个不同的主题有5个不同的评级。我需要在首页上穿鞋,这是登陆页面上评分最高的主题。

我有一个像创建像

这样的表的计划
table name: user_subject_rate

Structure

id: user_id: subject1: subject2: subject3: subject4: subject5

1     1           3       1          2        5         4

当我创建一个这样的表时,如果一个新主题开始出现会发生什么?

有人可以建议我解决这个问题吗?我使用mysql作为数据库。

1 个答案:

答案 0 :(得分:3)

我建议你按照下面的方式构建表格。

用户

user_id | name
-----------------
1         Michael
2         Andrew
3         Annie

<强>受试者

subject_id | name
----------------------
1            Maths
2            English
3            Physics
4            Chemistry
5            Biology

<强> users_subjects_scores

user_id | subject_id | score
----------------------------
1         1            5
1         2            5
1         3            4
1         4            2
1         5            3
2         1            1
2         2            2
2         3            4
2         4            5
2         5            3

然后,您可以使用此查询计算每个主题的总分:

SELECT
  name,
  COALESCE(SUM(score), 0) AS total_score
FROM
  subjects
LEFT JOIN
  users_subjects_scores USING (subject_id)
GROUP BY
  subject_id
ORDER BY
  SUM(score) DESC

然后添加新主题就像在subjects表中添加新行一样简单。

您可以看到SQL fiddle here