我有三个表:视频、视频类别和类别。
表格如下所示:
videos: video_id, title, etc...
videos_categories: video_id, category_id
categories: category_id, name, etc...
在我的应用程序中,我允许用户多选类别。当他们这样做时,我需要返回每个选定类别中的所有视频。
我最终得到了这个:
SELECT * FROM videos WHERE video_id IN (
SELECT c1.video_id FROM videos_categories AS c1
JOIN c2.videos_categories AS c2
ON c1.video_id = c2.video_id
WHERE c1.category_id = 1 AND c2.category_id = 2
)
但是对于我添加到多选的每个类别,我都必须在我的内部选择中添加一个连接:
SELECT * FROM videos WHERE video_id IN (
SELECT c1.video_id FROM videos_categories AS c1
JOIN videos_categories AS c2
ON c1.video_id = c2.video_id
JOIN videos_categories AS c3
ON c2.video_id = c3.video_id
WHERE c1.category_id = 1 AND c2.category_id = 2 AND c3.category_id = 3
)
我不禁觉得这是真正错误的方法,但我在试图看到正确的方法时被阻止了。