Jika saya mengerti dengan benar, Anda ingin mengurutkan hasil berdasarkan jumlah kecocokan dalam urutan menurun. Untuk melakukannya, Anda dapat mencoba:
SELECT movie
FROM genre_rel
WHERE genre IN (1, 8, 3)
GROUP BY movie
order by count(movie) desc
Dan jika Anda menginginkan film yang cocok dengan semua kriteria, Anda dapat menggunakan:
SELECT movie
FROM genre_rel
WHERE genre IN (1, 8, 3)
GROUP BY movie
HAVING count(movie) = 3
PEMBARUAN:
Ini adalah yang terbaik yang bisa saya lakukan di MySql. Anda tidak dapat menggunakan IN karena Anda tidak dapat mengekstrak informasi tentang urutan filter. Jika Anda menambahkan tabel turunan sebagai sarana pemfilteran, Anda dapat menambahkan informasi ini dan menggunakannya untuk menampilkan hasil berdasarkan kecocokan posisi. Perhatikan bahwa Anda tidak memberikan info pemesanan apa pun di tabel genre_rel sehingga Anda tidak benar-benar mengetahui pentingnya genre per film. Kueri ini akan memberi Anda film yang cocok berdasarkan urutan kepentingan genre dalam kriteria:
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
Perhatikan bahwa semua film kecuali 5 termasuk dalam 3 genre. Jika Anda menambahkan kolom ke genre_rel yang mewakili urutan kepentingan, Anda dapat merancang beberapa matematika (bobot - kepentingan atau yang serupa).