Se ho capito bene, vuoi ordinare i risultati per numero di corrispondenze in ordine decrescente. Per farlo, potresti provare:
SELECT movie
FROM genre_rel
WHERE genre IN (1, 8, 3)
GROUP BY movie
order by count(movie) desc
E se desideri film che soddisfino tutti i criteri, potresti utilizzare:
SELECT movie
FROM genre_rel
WHERE genre IN (1, 8, 3)
GROUP BY movie
HAVING count(movie) = 3
AGGIORNAMENTO:
Questo è il meglio che posso fare in MySql. Non puoi usare IN perché non puoi estrarre informazioni sull'ordine dei filtri. Se aggiungi una tabella derivata come mezzo di filtraggio, puoi aggiungere queste informazioni e usarle per mostrare i risultati in base alle corrispondenze posizionali. Nota che non fornisci informazioni sull'ordine nella tabella gender_rel, quindi non conosci davvero l'importanza dei generi per film. Questa query ti fornirà i film corrispondenti in base all'ordine decrescente di importanza dei generi nei criteri:
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
Nota che tutti i film tranne 5 appartengono a tutti e 3 i generi. Se aggiungi una colonna a gender_rel che rappresenta l'ordine di importanza, potresti escogitare un po' di matematica (peso - importanza o qualcosa di simile).