(MYSQL) abfrage in verbindung mit and und or...
matthias
- datenbank
hi,
ich habe eine frage zu einer mysql abfrage ( anders, großes problem ). um das ganze etwas übersichtlicher
zu gestallten, nehme ich folgendes beispiel:
---------------------------------------------------------------------------------------------------------
TABELLE:
namea nameb haus ort zugriff
hans werner 10 x 1
werner hans 10 x 0
werner hans 10 x 0
ABFRAGE:
name=hans
SELECT namea,nameb,haus,ort,zugriff FROM tabelle WHERE namea=$name OR nameb=$name AND zugriff=2 OR zugriff=1
als ergebniss bekomme ich zeile1.
$name=werner
SELECT namea,nameb,haus,ort,zugriff FROM tabelle WHERE namea=$name OR nameb=$name AND zugriff=2 OR zugriff=1
als ergebniss bekomme ich alle 3 zeilen.
----------------------------------------------------------------------------------------------------------
das script ist immer das selbe, nur $name wird geändert.
ich denke die abfrage ist nicht ganz korrekt.
wenn jemand die lösung kennt, würde ich mich über eine antwort sehr freuen.
gruß, matthias
Hallo Matthias
Du hast eher ein logisches als ein SQl- Problem. In deiner Abfrage fehlen einfach Klammern.
ABFRAGE:
name=hans
SELECT namea,nameb,haus,ort,zugriff FROM tabelle WHERE namea=$name OR nameb=$name AND zugriff=2 OR zugriff=1
Wenn ich dich richtig verstehe, möchtest du folgendes Wissen:
wenn namea oder nameb Hans ist und zusätzlich zugriff=1 oder zugriff=2 ist dann...
du fragst aber:
wenn (namea Hans ist) oder (nameb hans und zugriff=1) oder (zugriff=2)
bei der Abfrage nach Hans erfüllt nur die erste Zeile diese Bedingung
ansonsten taucht ja Hans nicht als namea auf und zugriff wird niemals 2
anders bei Werner in Zeile 1 existiert zugriff=1 und in den anderen Zeilen ist Werner jeweils namea
Deshalb die 3 Zeilen als Ergebnis.
Deine Abfrage sollte also lauten:
SELECT namea,nameb,haus,ort,zugriff FROM tabelle WHERE (namea=$name OR nameb=$name) AND (zugriff=2 OR zugriff=1)
Viele Grüße
Antje
hi,
ja, alles richtig erkannt.
mit
SELECT namea,nameb,haus,ort,zugriff FROM tabelle WHERE
(namea=$name OR nameb=$name) AND (zugriff=2 OR zugriff=1)
funktioniert es ohne probleme.
danke
Antje
Hi,
ich denke die abfrage ist nicht ganz korrekt.
Tja, wenn Du jetzt noch geschrieben hättest, was
Du als Ergebnis erwartet hast, könnte man vielleicht
sogar den Fehler suchen.
Andererseits könntest Du mal Deine Terme klammern
mfG - Michael