Als ik het goed begrijp, wil je de resultaten sorteren op aantal overeenkomsten in aflopende volgorde. Om dit te doen, kunt u het volgende proberen:
SELECT movie
FROM genre_rel
WHERE genre IN (1, 8, 3)
GROUP BY movie
order by count(movie) desc
En als u films wilt die aan alle criteria voldoen, kunt u het volgende gebruiken:
SELECT movie
FROM genre_rel
WHERE genre IN (1, 8, 3)
GROUP BY movie
HAVING count(movie) = 3
BIJWERKEN:
Dit is het beste wat ik kan doen in MySql. U kunt IN niet gebruiken omdat u geen informatie over de volgorde van filters kunt extraheren. Als u een afgeleide tabel toevoegt om te filteren, kunt u deze informatie toevoegen en gebruiken om resultaten weer te geven op basis van positionele overeenkomsten. Merk op dat je geen bestelinformatie opgeeft in de genre_rel-tabel, dus je weet niet echt het belang van genres per film. Deze zoekopdracht geeft u overeenkomende films in aflopende volgorde van belangrijkheid van genres in criteria:
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
Merk op dat alle films behalve 5 tot alle 3 de genres behoren. Als je een kolom toevoegt aan genre_rel die de volgorde van belangrijkheid voorstelt, zou je wat wiskunde kunnen bedenken (gewicht - belangrijkheid of iets dergelijks).