所以我正在尝试建立一个网站,其中我将在播放列表中组织不同的Youtube视频。我想要一个页面显示我按类别分组的播放列表,以及一个用“上一个”观看视频的观看页面和“下一步”按钮。我正在使用PHP和MySql。我总是吮吸数据库和表格关系;所以我对此毫无头绪。所以我的问题是:
首先,组织我的视频的最佳方式是什么?我希望我的链接类似于watch.php?playlist = n
& video = n
,其中video = 1将始终是相应播放列表中的第一个视频。现在我有一个playlist
表,其中包含playlist_id(PK)
playlist_name
和category
列。然后,我为每个特定的播放列表提供了一个表格,其列数为:video_id(PK)
playlist id(FK ref playlist.playlist_id)
video_name
和url
。我在正确的方向吗?
我的第二个问题是:将Youtube视频网址存储在数据库中是个好主意吗?如果没有,最好的方法是什么?
最后但并非最不重要的是,完成我想要的导航效果的最佳方法是什么(链接到当前显示的上一个和下一个视频)?我知道我必须使用_GET和_POST方法,我相信我能够弄明白,但如果你知道一个非常好的解释方法,我会很感激
答案 0 :(得分:2)
您可能需要查看许多有用的数据库结构模式。
最简单,最直观的一个是邻接列表(1:M):
CREATE TABLE `playlist` (
`playlist_id` INTEGER NOT NULL AUTO_INCREMENT,
`youtube_id` VARCHAR(255) NOT NULL; DEFAULT '',
-- other necessary fields pertaining to a playlist
PRIMARY KEY(`playlist_id`),
KEY(`youtube_id`)
);
CREATE TABLE `video` (
`video_id` INTEGER NOT NULL AUTO_INCREMENT,
`youtube_id` VARCHAR(255) NOT NULL; DEFAULT '',
-- other necessary fields pertaining to a video
PRIMARY KEY(`video_id`),
KEY(`youtube_id`)
);
以上只有缺点是无法将视频分配给多个播放列表 - 除非您接受视频记录可以具有不同video_id
但相同youtube_id
的事实(您将相同的视频两次插入表格中,以便将其与2个播放列表相关联。)
另一种经典数据库设计模式是联结表(M:N),这意味着创建一个将playlist_id
与video_id
相关联的单独表。这使您只能在视频表中插入一次视频,并将其与多个播放列表相关联。
如果您需要创建层次结构,例如具有最终具有播放列表的子类别的播放列表类别,则可以通过存储每个级别的关系“parent / grandparent / ancestor-level-n”来使用祖先表(类似于联结表) ”
另一种方法是分类模式,您可以在其中构建各种类型的分类法。例如,如果您要将播放列表组织为包含子类别的类别,子类别包含播放列表(附加视频)。
您可能想要创建一个taxonomy
表来存储类别记录或播放列表记录。
在数据库中存储YouTube视频网址完全没问题。许多CMS平台将链接和/或整个嵌入代码段保存为数据库中的varchar
或text
。
由于您知道自己只想要YouTube视频,因此只需从YouTube网址中提取相关内容即可利用该视频并在数据库中存储较少的数据。
网址:www.youtube.com/watch?v=VIDEOID&list=LISTID
您可以parse_url获取查询字符串,然后parse_query分别获取v
和list
参数。
如果上述建议适合您的用例(您确定youtube是并且将永远是您最重要/唯一的提供商),您可以删除playlist_id
和video_id
并使用{ {1}}从每个表作为主键(它们足够短,你可以很好地索引它们,你可以设置它们的唯一约束等。)。