AND - OR - Mischung bei der MySQL Abfrage

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • AND - OR - Mischung bei der MySQL Abfrage

    Hallo,

    sagt bitte nicht gleich "teste es selbst." Das hab ich schon :-)

    mein Problem:

    ich habe einen kleinen Kontaktscript geschrieben. Funktioniert aber halbwegs richtig.

    Frage: Kann / darf / soll man "AND" und "OR" mischen?

    Beispiel: SELECT * FROM table WHERE branche = '%".$text."%' OR name = '%".$text."%' AND plz = '%".$plztext."%' ....

    Das funktioniert manchmal richtig manchmal falsch...
    Ist es zufall, dass es manchmall funktioniert?

    Kann man da auch etwas in klammern setzen? Wie zumbveispiel:

    ... (brnache = $text OR name = $text ) OR ( bundesland$ = text OR stadt = $text ) ...

    Danke

  • #2
    bei AND und OR sollte man je nach logik auf jeden fall mit klammern arbeiten.

    WHERE bla='blubb' AND (laber='sülz' OR schwall='jodelblah')

    ist was anderes als

    WHERE bla='blubb' AND laber='sülz' OR schwall='jodelblah'

    gruß
    peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      Re: AND - OR - Mischung bei der MySQL Abfrage

      Kann man da auch etwas in klammern setzen?
      Oftmals musst du sowas in Klammern setzen um die Bedingung richtig zu definieren. Die Reihenfolge, wie Operatoren ausgewertet werden ist dabei entscheidend. Das ist mit der Punkt-vor-Strich-Regel zu vergleichen. Die Reihenfolge der Operatoren in MySQL kannst du dir im Manual ansehen. Wie du siehst, bindet der AND-Operator stärker als der OR-Operator.
      Code:
      foo=1 or bar=2 and foo=3 or bar=3
      ist dabei nicht das gleiche wie
      Code:
      ( foo=1 or bar=2 ) and ( foo=3 or bar=3 )
      da die Klammerung die Operatorenreihenfolge ändert ( 1+2*3 ist auch nicht das gleiche wie (1+2)*3 ).

      Hoffe, das macht es etwas klarer

      Kommentar


      • #4
        Und wenn du mit Wildcards arbeitest, kannst du nicht mit '=' vergelichen, sondern musst 'LIKE' benutzen, in deinem Bespiel also etwa:
        Code:
        SELECT 
        	attribut_1,
        	attribut_2,
        	...
        FROM 
        	table 
        WHERE 
        	(branche LIKE '%$text%' OR name LIKE '%$text%')
          AND 
        	plz LIKE '%$plztext%' ....
        Gruss
        H2O

        Kommentar


        • #5
          Vielen Dank...

          Also dass es funktioniert hat, war Zufall....

          Es hat mit Klammern scön geklappt.

          ich gebe meine ergenbiusse wie folgt aus:

          while ($kontakt = mysql_fetch_object($result)) {
          $k_art = $kontakt -> art;
          $k_id = $kontakt -> id;
          $k_br = $kontakt -> branche_id;
          switch ($k_art) {
          case 1: box1($k_id, $k_br); break;
          case 2: box2($k_id, $k_br); break;
          case 3: box3($k_id, $k_br); break;
          } // switch
          } // while

          Ich möchte die erbenisse seitenweise ausgeben. jeweisl 5 kontakte

          box1, 2, 3 --> ausgabe

          Google hat mir viele blätterfunktionen gefunden aber die Funktionieren hier nicht....

          macht das CASE da problem?

          Kommentar


          • #6
            Warum sollte das switch() ein Problem machen? Normale Blätterfunktionen setzten nur in der SQL-Query an und berühren das eigentliche/bestehende PHP-Script eigentlich kaum bis gar nicht.

            PS: Nein, Programmieren besteht nicht nur aus Copy&Paste, die logik dahinter sollte man zumindest nachvollziehen können um kleine Fehler zu finden.

            Kommentar


            • #7
              ich ziehe meine Frage zurück :-)

              hab den Fehler gefunden...

              Vielen Dank für eure Bemühungen und Antworte...

              Gruß, Kannkeinphp

              Kommentar

              Lädt...
              X