2016-11-29 4 views
3

Ich habe eine normalisierte Tabelle:SQL Query basierend auf anderen Tabelle

`Table: TheMovies` 
id  | MovieName 
--------------------- 
1  | Zootopia 
2  | Moana 
3  | Toy Story 

`Table: TheGenres` 
id  | GenreName 
--------------------- 
21  | Action 
22  | Animation 
23  | Adventure 

`Table: mMoviesGenres` 
movieID | genreID 
--------------------- 
1  | 21 
1  | 23 
2  | 22 
2  | 21 
3  | 23 
3  | 21 

Alle funktioniert gut, aber ich brauche eine Abfrage, die mir ähnliche Filme in gleichen Genres (in unserem Fall zeigen, werden wir ähnliche Filme für MovieID brauchen = 1, die als Ergebnis MovieID = 3 ausgeben soll).

Können Sie mir eine SQL-Abfrage geben, damit ich eine grundlegende Idee habe, um komplexere Abfragen zu erstellen?

Meine Anfrage, so weit ist:

SELECT 
    TheMovies.* 
FROM 
    mMoviesGenres 
     JOIN TheMovies ON mMoviesGenres.movieID = TheMovies.id 
WHERE 
    mMoviesGenres.genreID IN 
     (
      SELECT 
       genreID 
      FROM 
       mMoviesGenres 
      WHERE 
       movieID = 1 
     ) 

** Meiner Meinung nach ist die Tabelle: TheMovies nicht zu tun, ist erforderlich, was ich fragen Sie nach

+1

Ist dies MySQL oder SQL Server? Was hast du schon probiert? Was genau stecken Sie fest? –

+0

Ich versuchte dies:. SELECT * FROM TheMovies mMoviesGenres \t JOIN TheMovies ON mMoviesGenres.movieID = TheMovies.id \t WHERE mMoviesGenres.genreID \t IN (SELECT GenreID FROM mMoviesGenres WHERE MovieID = 1 – Coder

+0

immer noch die Frage MySQL- oder SQL- – C4u

Antwort

2

Diese Abfrage:

SELECT m2.movieId 
FROM mMoviesGenres m1 
INNER JOIN mMoviesGenres m2 
    ON m1.genreID = m2.genreID 
WHERE m1.movieId = 1 AND 
     m2.movieId <> 1 
GROUP BY m2.movieId 
HAVING COUNT(*) = (SELECT COUNT(*) FROM mMoviesGenres WHERE movieId = 1) 

Update:

Wenn Sie möchten, mov finden ies, die in Bezug auf mindestens zwei Gattungen ähnlich sind, dann verwenden Sie diese HAVING Klausel:

HAVING COUNT(*) >= 2 
+0

Kann dies sein, ohne den MovieName zu verwenden, und stattdessen die ID? – Coder

+0

Dies überprüft nicht, ob alle Genres mit anderen Filmen übereinstimmen – Coder

+0

@PHPLover Ich habe meine Antwort aktualisiert, bitte versuchen Sie es erneut. –

0
SELECT M.id FROM TheMovies M 
LEFT JOIN mMoviesGenres MG ON M.id = MG.movieID 
LEFT JOIN TheGenres G ON MG.genreID = G.id 

Sie in der richtigen Umgebung sind mit dem Versuch, aber du hast es etwas in der falschen Reihenfolge. Beginnen Sie mit TheMovies, da es die ID enthält, nach der Sie suchen. Fügen Sie dann mMoviesGenres hinzu, da dies die Verknüpfung zwischen den beiden Tabellen ist, die Sie abgleichen möchten. Und schließlich fügen Sie in den Genres hinzu, die in der Lage sein werden, zu überprüfen, welche Filme, die verwandt sind.

+0

Das funktioniert, aber es zeigt nur alle Filme, was ich brauche ist, dass nur Filme, die alle Genres übereinstimmen angezeigt werden. Also wenn ich suche ähnliche Filme für MovieID = 1 dann werden nur Filme mit: Action & Adventure angezeigt – Coder

Verwandte Themen