Если я правильно понимаю, вы хотите отсортировать результаты по количеству совпадений в порядке убывания.Для этого вы можете попробовать:
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 столбец, представляющий порядок важности, вы можете придумать какую-нибудь математику (вес - важность или что-то подобное).