4

我想知道将以下数据存储在 MySQL 数据库中的正确方法是什么。

假设一个对象,例如视频。我想存储其他用户给它的评分,所以选项是创建一个列并以复杂的方式存储用户的 ID 和他们的评分,如下所示:

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

我想这不是最有效的方法。有没有办法将表格存储在一行中?什么是最有效的方法,这样我就可以对评级使用 SQL 查询,而无需通过 PHP 代码处理数据?

4

3 回答 3

12

创建第二个表,ratings

+---------+---------+--------+
| 视频ID | 用户 ID | 评级 |
+---------+---------+--------+
| 5 | 158 | 4 |
| 5 | 5875 | 1 |
| 5 | 585 | 5 |
+---------+---------+--------+

然后,您可以根据需要在查询中对该表进行分组和/或加入;例如:

SELECT   videos.*, AVG(ratings.rating)
FROM     videos JOIN ratings ON videos.id = ratings.video_id
GROUP BY videos.id
于 2012-09-07T08:51:22.523 回答
6

规范化它

有2张桌子。

IE

ID   Video_name
5    Cool Video

第二个是

vid_id    userid   rating
5         158      4
5         5875     1
5         585      5
于 2012-09-07T08:51:36.257 回答
2

正常的方式是实体关系图。

然后你有

评分 * --- 1 个视频

也就是说,你有一个表“视频”

ID | Name
5  | cool video

还有一张“收视率”表

ID | value | USERID | video_ID
1  |  4    | 158    |  5
2  |  1    |  5875  |  5
3  |  5    |  585   |  5 
于 2012-09-07T08:54:34.983 回答