构造一个MySQL表,其中PLAYLIST表引用多个VIDEO id整数和一个USER表id

时间:2016-02-28 10:04:09

标签: php mysql database-design pdo

我想从VIDEOPLAYLIST中检索一个完整的对象,其中包含完整的USER对象以及与之相关的所有VIDEO对象。

我知道我需要使用LEFT JOIN来合并它们,但是我无法理解我应该如何设置我的PLAYLIST表以及如何在多个VIDEO ID中查询它。

这是我目前的数据库EER图: Original EER Diagram of my database tables

我应该在播放列表和视频之间创建多对多的关系吗? 我应该以某种方式存储PLAYLIST表中的所有VIDEO ID吗? 然后怎么能查询呢?

这就是我被困的地方:

SELECT * FROM videoplaylist LEFT JOIN user LEFT JOIN video ON user.id = playlist.user_id AND videos....

PS。我当时不打算查询一个PLAYLIST,因为我需要以列表格式显示它们。

1 个答案:

答案 0 :(得分:1)

是的,如果您希望将一个视频添加到多个播放列表中,则应在视频和播放列表表之间创建多对多关系。

因此,您的多对多关系表可能看起来像playlist_idvideo_id的组合是您的主键。

playlist_has_video
------------------
playlist_id
video_id

如果您希望能够多次向播放列表添加视频,则还必须在此表中创建一个id col。所以现在id是您的主要关键。

playlist_has_video
------------------
id
playlist_id
video_id

如果您想让用户对播放列表进行排序,请考虑在您的n-to-m表中添加另一个col order_id

playlist_has_video
------------------
id
playlist_id
video_id
order_id

现在让我们看看选择查询(我将参考上一个设计,id + order_id

从播放列表中检索所有视频:

SELECT video.* FROM playlist_has_video AS phv LEFT JOIN video ON phv.video_id = video.id WHERE phv.playlist_id = :playlist_id ORDER BY order_id ASC;

检索视频所在的所有播放列表:

SELECT playlist.* FROM playlist_has_video AS phv LEFT JOIN playlist ON phv.playlist_id = playlist.id WHERE phv.video_id = :video_id;

如果你使用这种方法,你必须改变你的视频 - 表格(确保删除playlist_id)

video
---------
id
title
description
user_id
transcript_id
created
updated