Ако разбирам правилно, искате да сортирате резултатите по брой съвпадения в низходящ ред. За да направите това, можете да опитате:
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, представяща реда на важност, може да измислите някаква математика (тегло - важност или нещо подобно).