Hvis jeg forstår det rigtigt, vil du sortere resultaterne efter antal matches i faldende rækkefølge. For at gøre det kan du prøve:
SELECT movie
FROM genre_rel
WHERE genre IN (1, 8, 3)
GROUP BY movie
order by count(movie) desc
Og hvis du vil have film, der matcher alle kriterierne, kan du bruge:
SELECT movie
FROM genre_rel
WHERE genre IN (1, 8, 3)
GROUP BY movie
HAVING count(movie) = 3
OPDATERING:
Dette er det bedste, jeg kan gøre i MySql. Du kan ikke bruge IN, fordi du ikke kan udtrække information om rækkefølge af filtre. Hvis du tilføjer afledte tabel som et middel til filtrering, kan du tilføje disse oplysninger og bruge dem til at vise resultater efter positionelle matches. Bemærk, at du ikke angiver bestillingsoplysninger i genre_rel-tabellen, så du ved ikke rigtig vigtigheden af genrer pr. film. Denne forespørgsel giver dig matchende film efter faldende rækkefølge efter vigtighed af genrer i kriterier:
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
Bemærk at alle filmene undtagen 5 tilhører alle 3 genrer. Hvis du tilføjer en kolonne til genre_rel, der repræsenterer rækkefølge af betydning, kan du måske udtænke noget matematik (vægt - vigtighed eller noget lignende).