2012-09-07 18 views
2

我想知道什麼是正確的方式來存儲MySQL數據庫中的以下數據。表內的MySQL表

讓我們說一個對象,例如一個視頻。我想保存這是由其他用戶給它的評級,所以在選擇是創建一個列和用戶的ID和他們的等級存儲在一個複雜的方式,這樣的:

| ID | video_name | rating (usrID,rating) | 
| 5 | cool video | (158,4),(5875,1),(585,5) | 

我猜測這不是最有效的方式。 有沒有辦法在行內存儲表格?什麼是最有效的方式來做到這一點,所以我可以在評級上使用SQL查詢,而無需通過PHP代碼處理數據?

回答

10

創建第二表,ratings

 
+----------+---------+--------+ 
| video_id | user_id | rating | 
+----------+---------+--------+ 
|  5 |  158 |  4 | 
|  5 | 5875 |  1 | 
|  5 |  585 |  5 | 
+----------+---------+--------+ 

然後可以和/或join此表中的查詢,如所期望;例如:

SELECT videos.*, AVG(ratings.rating) 
FROM  videos JOIN ratings ON videos.id = ratings.video_id 
GROUP BY videos.id 
5

正常化它

有2個表。

I.e.

ID Video_name 
5 Cool Video 

第二是

vid_id userid rating 
5   158  4 
5   5875  1 
5   585  5 
2

的正常方式是實體關係圖。

然後,你必須

評級* --- 1視頻

也就是說,你有一個表 「視頻」

ID | Name 
5 | cool video 

和一張桌子 「收視率」

ID | value | USERID | video_ID 
1 | 4 | 158 | 5 
2 | 1 | 5875 | 5 
3 | 5 | 585 | 5 
+0

哦eggyal比我快 – zen