matthias: (MYSQL) abfrage in verbindung mit and und or...

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

  1. 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

    1. 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

  2. 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

    • erstens wird es dann lesbarer, und zweitens mußt
      Du nicht mehr versuchen, die relative Bindungsstärke
      von AND gegenüber OR zu erraten ...

    mfG - Michael