2014-01-28 57 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