最初の MySQL データベースの作業を開始しましたが、単純な問題に遭遇しました。
私は自分の映画を「多対多」の関係でジャンル別に分類しています。
「映画」テーブル +---------+-------------------+ |movie_id |movie_title | +---------+-------------------+ |1 |インディアナ・ジョーンズ | |2 |死者のショーン | +---------+-------------------+ 「ジャンル」テーブル +---------+-----------+ |genre_id |genre_name | +---------+-----------+ |1 |冒険 | |2 |コメディ | |3 |ホラー | +---------+-----------+ 「movie_genres」テーブル +---------+---------+ |movie_id |genre_id | +---------+---------+ |1 |1 | |2 |2 | |2 |3 | +---------+---------+
私がやろうとしているのは、映画のテーブルをジャンル別に検索し、各映画が属するすべてのジャンルを表示することです。たとえば、次のようになります。
「ホラー」で検索しています +------------------+---------------+ |movie_title |genre_names | +------------------+---------------+ |ショーン・オブ・ザ・デッド |コメディ、ホラー | +------------------+---------------+
ホラー映画の検索に使用するクエリを次に示します。
SELECT m.movie_title, GROUP_CONCAT(g.genre_name SEPARATOR ', ') as Genre_names フロム ムービー m LEFT JOIN ジャンル_ムービー gm ON gm.movie_id = m.movie_id LEFT JOIN ジャンル g ON g.genre_id = gm.genre_id GROUP BY m.movie_id 「%horror%」のようなジャンル名を持つ
私が抱えている問題は、このクエリがフィルタリングする前にすべてのテーブル全体を取得することです。これは非常に非効率です。関連するすべてのジャンルを表示しながら、1 つのジャンルで検索できるより良い方法はありますか?