Pokud tomu dobře rozumím, chcete výsledky seřadit podle počtu shod v sestupném pořadí. Chcete-li to provést, můžete zkusit:
SELECT movie
FROM genre_rel
WHERE genre IN (1, 8, 3)
GROUP BY movie
order by count(movie) desc
A pokud chcete filmy, které splňují všechna kritéria, můžete použít:
SELECT movie
FROM genre_rel
WHERE genre IN (1, 8, 3)
GROUP BY movie
HAVING count(movie) = 3
AKTUALIZACE:
To je to nejlepší, co mohu v MySql udělat. Nemůžete použít IN, protože nemůžete extrahovat informace o pořadí filtrů. Pokud přidáte odvozenou tabulku jako prostředek filtrování, můžete tyto informace připojit a použít je k zobrazení výsledků podle pozičních shod. Všimněte si, že v tabulce žánru_rel neuvádíte žádné informace o objednání, takže vlastně neznáte důležitost žánrů na film. Tento dotaz vám poskytne odpovídající filmy v sestupném pořadí podle důležitosti žánrů v kritériích:
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
Všimněte si, že všechny filmy kromě 5 patří do všech 3 žánrů. Pokud do žánru_rel přidáte sloupec představující pořadí důležitosti, můžete navrhnout nějakou matematiku (váha - důležitost nebo něco podobného).