Jeśli dobrze rozumiem, chcesz posortować wyniki według liczby dopasowań w kolejności malejącej. Aby to zrobić, możesz spróbować:
SELECT movie
FROM genre_rel
WHERE genre IN (1, 8, 3)
GROUP BY movie
order by count(movie) desc
A jeśli chcesz filmy spełniające wszystkie kryteria, możesz użyć:
SELECT movie
FROM genre_rel
WHERE genre IN (1, 8, 3)
GROUP BY movie
HAVING count(movie) = 3
AKTUALIZACJA:
To najlepsze, co mogę zrobić w MySQL. Nie możesz użyć IN, ponieważ nie możesz wyodrębnić informacji o kolejności filtrów. Jeśli dodasz tabelę pochodną jako sposób filtrowania, możesz dołączyć te informacje i użyć ich do wyświetlenia wyników według dopasowań pozycyjnych. Pamiętaj, że nie podajesz żadnych informacji o kolejności w tabeli gatunek_rel, więc tak naprawdę nie wiesz, jak ważne są gatunki na film. To zapytanie wyświetli pasujące filmy według malejącej kolejności ważności gatunków w kryteriach:
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
Pamiętaj, że wszystkie filmy z wyjątkiem 5 należą do wszystkich 3 gatunków. Jeśli dodasz kolumnę do gatunek_rel reprezentującą kolejność ważności, możesz wymyślić trochę matematyki (waga - ważność lub coś podobnego).