Wenn ich das richtig verstehe, möchten Sie die Ergebnisse nach der Anzahl der Übereinstimmungen in absteigender Reihenfolge sortieren. Versuchen Sie dazu Folgendes:
SELECT movie
FROM genre_rel
WHERE genre IN (1, 8, 3)
GROUP BY movie
order by count(movie) desc
Und wenn Sie Filme wollen, die alle Kriterien erfüllen, können Sie Folgendes verwenden:
SELECT movie
FROM genre_rel
WHERE genre IN (1, 8, 3)
GROUP BY movie
HAVING count(movie) = 3
UPDATE:
Dies ist das Beste, was ich in MySql tun kann. Sie können IN nicht verwenden, da Sie keine Informationen über die Reihenfolge von Filtern extrahieren können. Wenn Sie eine abgeleitete Tabelle zum Filtern hinzufügen, können Sie diese Informationen anhängen und verwenden, um Ergebnisse nach Positionsübereinstimmungen anzuzeigen. Beachten Sie, dass Sie in der genre_rel-Tabelle keine Bestellinformationen angeben, sodass Sie die Bedeutung der Genres pro Film nicht wirklich kennen. Diese Abfrage gibt Ihnen passende Filme nach absteigender Wichtigkeit der Genres in Kriterien:
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
Beachten Sie, dass alle Filme außer 5 zu allen 3 Genres gehören. Wenn Sie genre_rel eine Spalte hinzufügen, die die Wichtigkeitsreihenfolge darstellt, könnten Sie eine Mathematik entwickeln (Gewicht - Wichtigkeit oder etwas Ähnliches).