MySQL: WHERE über mehrere Zeilen

Tommy57

Erfahrenes Mitglied
Hallo,

ich speichere in einer Tabelle Attribute, wobei jedes Attribut einer Zeile entspricht. Nun wird zum Beispiel bei der Suche nach Items gesucht, die mehrere bestimmte Attribute haben.

1;17
1;23
1;25
1;31
2;11
2;13
2;15

Wenn ich nun alle Items mit dem Attribut 17, 25 und 31 suchen würde, wie könnte ich das elegant lösen. Es könnte je nach Suchanfrage vllt auch nach 5 Attributen gefragt werden.

Eventuell besteht auch Interesse daran, später Abfragen zu bauen, wie zum Beispiel
13 UND (15 ODER 17) ABER OHNE 19.
Ist sowas möglich?

Gruß, Tommy
 
Wenn du weisst, wieviele Attribute du suchst, dann kannst du das relativ einfach lösen
SQL:
SELECT nid
FROM mytable
WHERE attr IN (17,25,31)
GROUP BY nid
-- Hier gegenprüfen, ob wirklich alle 3 gefunden wurden
HAVING COUNT(*) = 3

Und fürs 2te. Keine Ahnung obs funktioniert. Aber etwa so würde ich es austesten
SQL:
SELECT DISTINCT nid
FROM mytable
WHERE 
  -- Alle ausser den 19er nehmen
  attr !=19
  -- Prüfen obs dazu eine 13 gibt
  AND nid IN (SELECT nid FROM mytable WHERE attr = 13)
  -- Prüfen obs dazu auch noch eine 15 oder 17 gibt
  AND nid IN (SELECT nid FROM mytable WHERE attr IN (15,17))
 
Zurück