ビデオ、videos_categories、およびカテゴリの 3 つのテーブルがあります。
テーブルは次のようになります。
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
)
これは本当に間違った方法だと感じずにはいられませんが、適切な方法を見つけようとしてブロックされています。