私が正しく理解している場合は、一致数の降順で結果を並べ替えます。そのためには、次のことを試してください。
SELECT movie
FROM genre_rel
WHERE genre IN (1, 8, 3)
GROUP BY movie
order by count(movie) desc
また、すべての基準に一致する映画が必要な場合は、次を使用できます。
SELECT movie
FROM genre_rel
WHERE genre IN (1, 8, 3)
GROUP BY movie
HAVING count(movie) = 3
更新:
これは、MySqlで実行できる最善の方法です。フィルタの順序に関する情報を抽出できないため、INは使用できません。フィルタリングの手段として派生テーブルを追加する場合は、この情報を追加して、位置の一致によって結果を表示するために使用できます。 genre_relテーブルに注文情報を指定しないため、映画ごとのジャンルの重要性が実際にはわからないことに注意してください。このクエリは、基準のジャンルの重要度の降順で一致する映画を提供します:
SELECT movie
FROM genre_rel
INNER join
(
select 1 genre, 1000 weight
union all
select 8, 100
union all
select 3, 10
) weights
on genre_rel.genre = weights.genre
GROUP BY movie
order by sum(weight) desc
5つを除くすべての映画は3つのジャンルすべてに属していることに注意してください。重要度の順序を表す列をgenre_relに追加すると、いくつかの数学(重み-重要度など)を考案する可能性があります。