我有两张桌子 - 视频和播放列表
通常我会为1-Many关系创建两个相应的表和一个多值表,这样:
视频= [pk,videoId,标题等..]
播放列表= [pk,title等。]
Playlists_Videos = [VideosFK,PlaylistFK]
或者,我一直在考虑仅创建两个表并在播放列表表中有一个字段,该字段具有逗号分隔的VideoFK字符串。我的应用程序可以在id字符串上“拆分”,然后根据id的数组从缓存中检索元素,所以:
视频= [pk,videoId,标题等..]
播放列表= [pk,videoIds,title等。]
示例数据可能如下所示:
视频 - 1,“abcd”,标题,...
视频 - 2,“efgh”,另一个标题,...
视频 - 3,“ijkl”,另一个,...
视频 - 4,“mnop”和另一个,... ...
播放列表 - 1,“abcd,efgh,ijkl,mnop”,...
使用这种结构,如果我想查找包含视频的所有播放列表,我可以使用如下设置查询:
SELECT *
FROM Playlists
WHERE videoIds like '%VideoID%';
否则我可以在传统模型中执行标准连接查询:
SELECT *
FROM Playlists
WHERE pk in (SELECT PlaylistFK
FROM Playlists_Videos pv
WHERE VideoFK = '%videoPK%');
虽然这有效,但我想了解自己正在做什么,并且好奇MySQL在较低级别上做了什么。有什么警告?缩放时这是如何执行的?
由于
编辑 - “videoIds”包含在varchar中,该varchar是逗号分隔的唯一字符串视频标识符字符串(YouTube视频ID)
答案 0 :(得分:2)
暂时考虑一下:
WHERE videoIds like '%VideoID%';
如果videoid
值为1,则匹配:
为了您自己(和我们的),请使用三个表格设置: