Om jag förstår det rätt vill du sortera resultat efter antal matchningar i fallande ordning. För att göra det kan du försöka:
SELECT movie
FROM genre_rel
WHERE genre IN (1, 8, 3)
GROUP BY movie
order by count(movie) desc
Och om du vill ha filmer som matchar alla kriterier kan du använda:
SELECT movie
FROM genre_rel
WHERE genre IN (1, 8, 3)
GROUP BY movie
HAVING count(movie) = 3
UPPDATERING:
Det här är det bästa jag kan göra i MySql. Du kan inte använda IN eftersom du inte kan extrahera information om ordningen på filter. Om du lägger till härledd tabell som ett sätt att filtrera, kan du lägga till denna information och använda den för att visa resultat efter positionsmatchningar. Observera att du inte tillhandahåller någon beställningsinformation i genre_rel-tabellen så du vet inte riktigt vikten av genrer per film. Den här frågan ger dig matchande filmer efter fallande ordning av betydelse för 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
Observera att alla filmer utom 5 tillhör alla 3 genrer. Om du lägger till en kolumn till genre_rel som representerar ordningsföljd av betydelse kan du komma på lite matematik (vikt - betydelse eller något liknande).