gpt4 book ai didi

php - 构建 MySQL 表,其中 PLAYLIST 表引用多个 VIDEO id 整数和 USER 表 id

转载 作者:行者123 更新时间:2023-11-29 11:41:44 25 4
gpt4 key购买 nike

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

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

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

我应该在播放列表和视频之间创建多对多关系吗?我应该以某种方式将所有视频 ID 存储在 PLAYLIST 表中吗?那么如何查询呢?

这就是我陷入困境的地方:

SELECT * FROM videoplaylist LEFT JOIN user LEFT JOIN video ON user.id = playlist.user_id AND videos....
PS。我当时不会只查询一个播放列表,因为我需要以列表格式显示它们。

最佳答案

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

因此,您的多对多关系表可能如下所示,其中 playlist_idvideo_id 的组合是您的主键。

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

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

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

当您想让用户对播放列表进行排序时,请考虑向您的 n 到 m 表中添加另一个列 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

关于php - 构建 MySQL 表,其中 PLAYLIST 表引用多个 VIDEO id 整数和 USER 表 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35681122/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com