我必须为我的排名场景找到解决方案。
假设我在数据库中有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作为数据库。
答案 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。