2014-01-28 58 views
0

我必须找到我的排名方案的解决方案。排名不同的逻辑

说我有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

1.参见标准化。 – Strawberry

回答

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

+0

哦,我忘了基本的关系。现在我明白了。感谢MichaelRushton – anoop