我想从VIDEOPLAYLIST中检索一个完整的对象,其中包含完整的USER对象以及与之相关的所有VIDEO对象。
我知道我需要使用LEFT JOIN来合并它们,但是我无法理解我应该如何设置我的PLAYLIST表以及如何在多个VIDEO ID中查询它。
我应该在播放列表和视频之间创建多对多的关系吗? 我应该以某种方式存储PLAYLIST表中的所有VIDEO ID吗? 然后怎么能查询呢?
这就是我被困的地方:
SELECT * FROM videoplaylist LEFT JOIN user LEFT JOIN video ON user.id = playlist.user_id AND videos....
PS。我当时不打算查询一个PLAYLIST,因为我需要以列表格式显示它们。
答案 0 :(得分:1)
是的,如果您希望将一个视频添加到多个播放列表中,则应在视频和播放列表表之间创建多对多关系。
因此,您的多对多关系表可能看起来像playlist_id
和video_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