iro*_*ith 5 mysql sql many-to-many
我有三个表:视频,视频_类别和类别.
表格如下所示:
videos: video_id, title, etc...
videos_categories: video_id, category_id
categories: category_id, name, etc...
Run Code Online (Sandbox Code Playgroud)
在我的应用程序中,我允许用户多选类别.当他们这样做时,我需要返回所有选定类别中的所有视频.
我最终得到了这个:
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
)
Run Code Online (Sandbox Code Playgroud)
但是对于我添加到multiselect的每个类别,我必须在内部选择中添加一个连接:
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
)
Run Code Online (Sandbox Code Playgroud)
我不禁觉得这是真正错误的做法,但我试图找到正确的方法来阻止它.
如果这是主键:
videos_categories: video_id, category_id
Run Code Online (Sandbox Code Playgroud)
然后GROUP BY和HAVING应该工作,试试这个:
SELECT
*
FROM videos
WHERE video_id IN (SELECT
video_id
FROM videos_categories
WHERE category_id IN (1,2,3)
GROUP BY video_id
HAVING COUNT(video_id)=3
)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1612 次 |
最近记录: |