hi!
Ich finde leider nicht die richtige Abfrage, um folgendes herauszufinden:
Ich habe eine Tabelle mit 2 Spalten, die erste Spalte ist die ID des Content Elements, die 2. Spalte die ID der Eigenschaft.
ID Eigenschaft
31 27
31 55
31 60
32 27
32 64
Nun wird mittels eines Formulars Checkboxwerte übermittelt, und ich möchte herausfinden, welches Element alle diese Eigenschaften hat.
Ich habe es mit "select distinct id from table where eigenschaft in (27,55,60)" probiert, das funktioniert, da die ID ja all diese Eigenschaften hat.
Wenn ich aber zb. "select distinct id from table where eigenschaft in (27,55,60,64)" abfrage, dann bringt er mir auch die ID 31 als Ergebnis, aber die soll er ja nicht ausgeben.
Ich steh einfach am Schlauch, wie ich das abfragen soll. Wär super, wenn mir jemand helfen könnte! Danke!
Ankündigung
Einklappen
Keine Ankündigung bisher.
Welche Abfrage, um ID in Relationshiptabelle zu finden???
Einklappen
Neue Werbung 2019
Einklappen
X
-
Welche Abfrage, um ID in Relationshiptabelle zu finden???
Stichworte: -
-
Zitat von VPh Beitrag anzeigenThis should work. Für jeden Wert einen Inner Join ranhängen.
Code:test=*# select * from sunspot ; id | eigenschaft ----+------------- 31 | 27 31 | 55 31 | 60 32 | 27 32 | 64 (5 rows) Time: 0,145 ms test=*# select id from (select id, array_agg(eigenschaft) as eigenschaft from sunspot group by id) foo where eigenschaft @> array[27,55,60]; id ---- 31 (1 row) Time: 0,297 ms test=*# select id from (select id, array_agg(eigenschaft) as eigenschaft from sunspot group by id) foo where eigenschaft @> array[27,55,60, 62]; id ---- (0 rows)
-
1. Query: http://sqlfiddle.com/#!2/8a202/3/0
2. Query: http://sqlfiddle.com/#!2/8a202/1/0
Wenn bei dir das falsche Ergebnis kommt, hast du hier falsche Daten geliefert.
Edit: Abfragen sind trotzdem fehlerhaft, wird überarbeitet
Edit2:
Code:SELECT DISTINCT Relation.ID FROM Relation JOIN Relation Abfrage1 ON Relation.ID = Abfrage1.ID AND Abfrage1.Eigenschaft = 27 JOIN Relation Abfrage2 ON Relation.ID = Abfrage2.ID AND Abfrage2.Eigenschaft = 55 JOIN Relation Abfrage3 ON Relation.ID = Abfrage3.ID AND Abfrage3.Eigenschaft = 60
http://sqlfiddle.com/#!2/8a202/7/0
Einen Kommentar schreiben:
-
Ich bekomme es weder mit ALL hin, noch mit dem 2. Tipp von VPh, der liefert mir immer ein leeres Ergebnis. Gibt es vielleicht noch einen Lösungsansatz?
DANKE!!!
Einen Kommentar schreiben:
-
Code:SELECT DISTINCT ID FROM Test WHERE Eigenschaft IN ( 27, 55, 60 ) AND ( SELECT COUNT(*) FROM Test sub WHERE sub.ID = Test.ID ) = 3;
Code:SELECT ID FROM Test WHERE Eigenschaft IN ( 27, 55, 60 ) GROUP BY ID HAVING COUNT(DISTINCT Eigenschaft) = 3;
Einen Kommentar schreiben:
-
Danke.
Ich habe es nun mit "select id from tabelle where eigenschaft = ALL (52, 55, 54, 64)" probiert, aber da schreibt mir mysql eine Fehlermeldung.
Noch einen Tipp, was an der query nicht passt?
Einen Kommentar schreiben:
-
Statt "IN" "ALL" verwenden. Du willst ja nicht das die Eigenschaft darin vorkommt, sondern das ALLE zutreffen.
Einen Kommentar schreiben:
Einen Kommentar schreiben: