Abfrage m:n tabellen geben 0 Datensätze zurück

Commu

Benutzer
Beiträge
12
Ich habe eine Medien Datenbank in der ich alle meine Movies und Serien die ich als MP4 gespeichert habe gelistet.

so habe ich die Genres mit den Filmen in einer m:n relation gesetzt.
SQL:
    SELECT *
     FROM ht_filme a
LEFT JOIN zt_genre b
            ON a.id = b.filme_id
           AND b.medien_art = 1
    WHERE b.genre_id = 1
      AND b.genre_id = 2
 GROUP BY a.id 
 ORDER BY a.titel ASC

ht_filme - zt_genre - ut_genre

In ht_filme sind alle Filme enthalten.
In ut_genre gibt es die möglichen Genres
und die zt_genre dient der m:n Verknüpfung

Wenn ich das oben genannte Statment ausführe habe ich 0 Datensätze.
ich möchte als Ergebnis aber alle Filme die sowohl 1 (Action) und 2 (Abenteuer) als Merkmal haben.
 
Werbung:
SQL:
CREATE TABLE IF NOT EXISTS `zt_genre` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `medien_art` int(11) NOT NULL DEFAULT 1,
  `filme_id` int(11) NOT NULL,
  `genre_id` int(11) NOT NULL,
  PRIMARY KEY (`id`)

diese Spalten stehen zur Verfügung
 
Unbenannt.png
das sollte die Zuordnung sein, das habe ich aber nirgendwo festgehalten oder definiert.
das habe ich auch noch nie gemacht deswegen die ??
 
nicht oder .
"b.genre_id = 1 AND b.genre_id = 2"
Das Genre kann Aktion, Abenteuer SiFi und Komödie sein.
Im Filter möchte ich eine Anzeige von Filmen die den Genres Aktion und Abenteuer entspricht.

Im Select-Statment "WHERE b.genre_id = 1 AND b.genre_id = 2" habe ich diese Zuordnung gemacht.
ich bekomme aber 0 Datensätze zurück.
 
Hast du denn Filme, die Aktion UND Abenteuer zugewiesen sind?

Bekommst du Ergebnisse bei nur einem Genre?
Sprich "b.genre_id = 1" bzw. "b.genre_id = 2"
 
angenomme, du hast eine tabelle genre mit Spalten film und genre. Diese dient zur Zuweisung eines oder mehrere genres zu einem Film.
Du suchst alle Filme mit genre in (2,4):

Code:
postgres=# select * from genre ;
 film | genre 
------+-------
    1 |     1
    1 |     2
    1 |     4
    2 |     2
    2 |     3
    2 |     4
    3 |     1
    3 |     6
    3 |     4
(9 rows)

postgres=# select film, array_agg(genre) from genre group by film having array_agg(genre) @> array[2,4];
 film | array_agg 
------+-----------
    2 | {2,3,4}
    1 | {1,2,4}
(2 rows)

postgres=#

Das in Deine Tabellen und Abfrage einzubauen überlasse ich Dir zur Übung.
 
Werbung:
ja, wenn ich nach einem genre suche, habe ich ein Ergebniss sobald das 2. hinzu kommt habe ich 0

SQL:
SELECT filme_id
  FROM zt_genre
 WHERE medien_art = 1
    AND genre_id IN (1,2)

das wäre eine OR-Abfrage

vielen Dank akretschmer

Leider benutze ich eine MarieDB und mit "@> array[2,4]" habe ich eine Fehlermeldung
 
Zurück
Oben