• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

SQL-Abfrage streikt

kulka1

Mitglied
Hallo ..

also ich möchte in einer Abfrage mehrere WHERE Bedingungen einfügen. Solange ich nur AND Bedingungen habe, klappt alles super. Aber sobald ich eine OR Bedingung einfüge, streikt die Abfrage.

Zum Beispiel möchte ich herausfinden bei welchem Spiel kein Tor eingetragen wurde von Team X.

Code:
SELECT * FROM `spielplan` WHERE torheim='' AND heim='X' OR gast = 'X'

Bei dieser Abfrage werden jedoch auch Ergebnisse ausgespuckt wo torheim bereits einen Wert hat.

Wenn ich allerdings die Abfragen einzelnd mache wie zb:

Code:
SELECT * FROM `spielplan` WHERE torheim='' AND heim='X'
und
Code:
SELECT * FROM `spielplan` WHERE torheim='' AND gast='X'

dann funktionieren die ausgaben und es wird alles richtig ausgegeben.


Kann mir jemand erklären woran das liegt? Das sich zwei Abfragen bei WHERE nicht "vertragen"?!

Danke schon mal im voraus ! ;)


EDIT:
Nach mehrerem rumprobieren habe ich es herausgefunden ..

Code:
SELECT * FROM `spielplan` WHERE torheim='' AND (heim='X' OR gast = 'X')

so hat es geklappt :)
 
Zuletzt bearbeitet:
Ja, genau. Das logische AND hat üblicherweise in Programmierdingen im Vergleich zum logischen OR die höhere Operator-Rangfolge. Das ist vergleichbar zu Punkt-vor-Strich-Rechnung, sozusagen AND-vor-OR-Rechnung. ;)

a * b + c * d → (a * b) + (c * d)
a AND b OR c AND d → (a AND b) OR (c AND d)

a + b * c + d → a + (b * c) + d
a OR b AND c OR d → a OR (b AND c) OR d

Ich empfehle dringend, bei AND und OR immer explizit Klammern zu setzen, da das sonst einfach unnötig verwirrend ist, weil Leute (ich zumindest) das nicht so sehr in Fleisch und Blut haben wie bei Multiplikation und Addition. Wenn ich solche Ausdrücke ohne Klammerung sehe, gehe ich sozusagen erst mal davon aus, dass sie falsch sind.
 
Zurück
Oben