SELECT-Anweisung-Problem
LenaLuna
- datenbank
hallo foren
folgendes problem:
tabelle
id id_benutzer farbe
1 1 rot
2 1 blau
3 1 gelb
4 2 rot
5 2 blau
6 3 rot
7 3 blau
8 3 gelb
9 3 gruen
gibt es eine möglichkeit, dass ich mit einer SELECT-anweisung herausfinden kann welcher benutzer
die farben rot und blau und gelb verwendet?
die betonung liegt also auf das wörtchen "und".
"oder" ist ja kein problem
SELECT DISTINCT id_benutzer FROM tabelle WHERE farbe = 'rot' OR farbe = 'blau' OR farbe = 'gelb';
"und" kann ich natürlich nicht so schreiben:
SELECT DISTINCT id_benutzer FROM tabelle WHERE farbe = 'rot' AND farbe = 'blau' AND farbe = 'gelb';
da findet mysql nämlich gar nichts mehr.
ist auch klar weil ja zeilenweise abgearbeitet wird kann die bedingung aller drei farben auf die spalte farbe nie zutreffen.
frage nun wie mache ich das mit einer SELECT-anweisung.
geht das überhaupt?
gruss LenaLuna
Hi!
tabelle
id id_benutzer farbe
1 1 rot
2 1 blau
3 1 gelb
4 2 rot
5 2 blau
6 3 rot
7 3 blau
8 3 gelb
9 3 gruen
frage nun wie mache ich das mit einer SELECT-anweisung.
geht das überhaupt?
Es ginge vielleicht mit folgendem Trick:
SELECT id_benutzer
FROM tabelle
WHERE farbe = 'rot'
OR farbe = 'blau'
OR farbe = 'gelb
GROUP BY id_benutzer
HAVING COUNT(*) = '3'
Ich gruppiere nach Benutzern, die rot, gelb oder blau eingetragen haben, und sortiere am Ende alle aus die nicht 3 Farben haben. Setzt voraus das jeder Benutzer nur 1 Datensatz pro Farbe hat.
Grüße
Andreas
Halihallo LenaLuna
gibt es eine möglichkeit, dass ich mit einer SELECT-anweisung herausfinden kann welcher benutzer
die farben rot und blau und gelb verwendet?
SELECT DISTINCT
A.benutzer_id
FROM
tabelle AS A,
tabelle AS B,
tabelle AS C
WHERE
A.benutzer_id=B.benutzer_id AND B.benutzer_id=C.benutzer_id AND
A.farbe='rot' AND
B.farbe='blau' AND
C.farbe='gelb'
Das ist übrigens "bool'sche Suche auf Datenbank abgebildet" und behilft sich mehrerer
Alias derselben Tabelle.
"und" kann ich natürlich nicht so schreiben:
Jups ;)
frage nun wie mache ich das mit einer SELECT-anweisung.
geht das überhaupt?
unschön (aperformant), aber ja.
Viele Grüsse
Philipp
hallo phillip
oh auf die idee wäre ich nicht gekommen.
im grunde genommen ist ja dies das gleiche wie wenn du über mehrere unterschiedliche tabellen abfrägst.
muss ehrlich sagen habe noch nie mit alias gearbeitet.
sei umarmt
gruss LenaLuna
Halihallo LenaLuna
im grunde genommen ist ja dies das gleiche wie wenn du über mehrere unterschiedliche tabellen abfrägst.
Genau. MySQL spielt das keine Rolle, obs die gleiche oder eine andere ist. Verschiedene
Alias werden von der DB so (naja, fast) behandelt, als wären es verschiedene Tabellen.
muss ehrlich sagen habe noch nie mit alias gearbeitet.
Dann ist ja jetzt die Zeit gekommen ;)
---
Aber: schau dir nochmals den Lösungsvorschlag von Andreas an (der ist nämlich wirklich
auch sehr gelungen, wenn's bei AND bleibt und du keine komplexen AND/OR Verschachtelungen
abfragen möchtest). Zudem ist er wesentlich performanter (in vielen Fällen zumindest).
Viele Grüsse
Philipp