Sebastian: WHERE AND und OR

Hallihallo Leute.
Ich mal wieder...

Ich wollte fragen ob man bei einer normalen Select-Abfrage mit WHERE AND und OR verwenden kann und wenn ja dann wie?

Also Beispiel:

Select Leiche from Schauhaus WHERE Name = 'Peter' AND Gestorben = '1980' OR Gestorben = '1990'

Danke im vorraus.

PS.: das da oben ist wirklich nur ein Beispiel.

  1. Hi,

    Ich wollte fragen ob man bei einer normalen Select-Abfrage mit WHERE AND und OR verwenden kann und wenn ja dann wie?

    ja und so, wie es in der Dokumentation Deines DBMS - welches immer das sein mag - beschrieben ist. Aber was hat das mit PHP zu tun?

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Mist.

      Ich wusste das es immernoch nicht geht. Die Antwort war zu einfach.

      Folgendes:

      $textabfrage = mysql_query("SELECT * FROM chat WHERE empfaengerid='0' OR empfaengerid='".$userrow->id."' OR absender='".$userrow->username."' AND (id > '".$last2."' AND id < '".$max."') ORDER BY id");
      while($textrow = mysql_fetch_object($textabfrage))
      {
      //ausgabe//
      }

      Was ist daran falsch?
      Ich finde es nicht.
      Also funktionieren tut das hier nicht.

      MfG
      Sebastian

      1. Hi,

        Folgendes:

        $textabfrage = mysql_query("SELECT * FROM chat WHERE empfaengerid='0' OR empfaengerid='".$userrow->id."' OR absender='".$userrow->username."' AND (id > '".$last2."' AND id < '".$max."') ORDER BY id");
        while($textrow = mysql_fetch_object($textabfrage))
        {
        //ausgabe//
        }

        Da es wohl am mySql-Query liegt interessiert hier der PHP-Quellcode nicht. Außerdem weiß hier bestimmt keiner, was in den einzelnen Variablen steht.

        Was ist daran falsch?
        Also funktionieren tut das hier nicht.

        Was heißt das? liefert es garkein Ergebnis, das falsche Ergebnis oder nur eine Fehlermeldung?

        Am besten du lässt dir das Query mal mit einem echo ausgeben und schaust, ob es das enthält was du erwartest.
        Wenn das der Fall ist kannst du es ja mal direkt in der mySql-Konsole ausführen lassen. Wenn dann nicht das gewünschte Ergebnis kommt kannst du uns ja mal genauer beschreiben, was das Querry machen soll und was es momentan macht.

        mfG,
        steckl

        1. $userrow->* wird jeweils früher aus der datenbank entnommen...
          bekommen tu ich alles...das heißt zuviel...
          was aber in der klammer gesagt werden soll ist das vom letzten eintrag der da war bevor man sich eingeloggt hat 100 einträge anzeigen soll die geschriebn wurden...und davor wird gesagt das man nur die angezeigt bekommt die an einem geflüstert wurden...die an alle gesagt werden...und die man selbst geschickt hat....

          -also sag ich mal es sind 120 einträge...
          -bei eintrag 90 hat man sich eingeloggt...
          -das heißt $last2 ist 90 und $max damit 190...
          -$userrow->id is die eigene id und $userrow->username ist der eigene name

          • empfaengerid 0 steht dafür das es an alle ist

          • und order by id ist ja eigentlich bekannt damit alles schön nach reihenfolge angezeigt wird

          • limit(also dann LIMIT $last2,$max) kann ich nicht verwenden aus dem grund das nicht alle nachrichten an mich oder an alle sind sondern auch private nachrichten an andere gehen und vielleicht aus irgendeinen grund auch mal eine nachricht gelöscht wird

          $textabfrage = mysql_query("SELECT * FROM chat WHERE empfaengerid='0' OR empfaengerid='".$userrow->id."' OR absender='".$userrow->username."' AND (id > '".$last2."' AND id < '".$max."') ORDER BY id");
          while($textrow = mysql_fetch_object($textabfrage))
          {
          //ausgabe//
          }

          wenn mehr benötigt wird bitte bescheidsagen^^

          MfG
          Sebastian

          1. Hi,

            • limit(also dann LIMIT $last2,$max) kann ich nicht verwenden aus dem grund das nicht alle nachrichten an mich oder an alle sind sondern auch private nachrichten an andere gehen und vielleicht aus irgendeinen grund auch mal eine nachricht gelöscht wird

            Wäre eigentlich ein typischer Anwendungsfall für LIMIT wenn ich das oben richtig verstanden habe. Du musst eben erst mit WHERE die entsprechenden Einträge rausfiltern und dann mit LIMIT 100 davon nehemn. Mit deiner Methode bekommst du meistens weniger wie 100, falls welche dabei sind, die nicht für den User bestimmt sind. Mit LIMIT wären es immer genau 100.

            $textabfrage = mysql_query("SELECT * FROM chat WHERE empfaengerid='0' OR empfaengerid='".$userrow->id."' OR absender='".$userrow->username."' AND (id > '".$last2."' AND id < '".$max."') ORDER BY id");
            while($textrow = mysql_fetch_object($textabfrage))
            {
            //ausgabe//
            }

            wenn mehr benötigt wird bitte bescheidsagen^^

            Das ist immernoch PHP. Warum gibst du nicht einfach _nur_ das von dir erzeugte mySql-Query an? Das würde das ganze vereinfachen.
            So wie ich das sehe hast du einfach nur die Klammern falsch gesetzt. Du musst in deinem Fall die Klammern um die Bedingungen, die mit OR verknüft sind, machen.

            Ausserdem warum speicherst du beim Absender den Namen und nicht die Absender-ID? Das wäre dann sauberer.

            mfG,
            steckl

      2. Hi Sebastian!

        $textabfrage = mysql_query("SELECT * FROM chat WHERE empfaengerid='0' OR empfaengerid='".$userrow->id."' OR absender='".$userrow->username."' AND (id > '".$last2."' AND id < '".$max."') ORDER BY id");

        Ich habe mich jetzt nicht näher mit deinem Problem beschäftigt
        und kenne mich auch nicht besonders mit MySQL aus,
        aber ich finde das "AND" in der letzten Klammer deines Query-Strings merkwürdig.

        Wie gesagt, hab ich aber auch nicht so viel Ahnung davon.
        Vielleicht war es aber auch nur der kleine Fehler - wenn es einer ist.

        Ciao, Torsten

  2. Hi,

    Ich wollte fragen ob man bei einer normalen Select-Abfrage mit WHERE AND und OR verwenden kann und wenn ja dann wie?

    Select Leiche from Schauhaus WHERE Name = 'Peter' AND Gestorben = '1980' OR Gestorben = '1990'

    Hast du das mal ausprobiert? Sollte eigentlich so funktionieren. Soweit ich weiß hat AND immer Vorrang vor OR. Wenn du es anders haben willst musst du Klammern setzen:

    Select Leiche from Schauhaus WHERE Name = 'Peter' AND (Gestorben = '1980' OR Gestorben = '1990');

    mfG,
    steckl

    1. Wow.

      Danke steckl.
      Hast mir sehr geholfen.
      Falls du wissen willst wofür das wirklich ist: Für einen Chat^^.

      Mit freundlichen Grüßen
      Sebastian

      1. Hallo

        Select Leiche from Schauhaus WHERE Name = 'Peter' AND Gestorben = '1980' OR Gestorben = '1990'

        Falls du wissen willst wofür das wirklich ist: Für einen Chat^^.

        Aha, eine Séance?

        Tschö, Auge

        --
        Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
        (Victor Hugo)
        <dingdong /><dingdong /><toc /><toc /><toc /><shout>Florence!</shout>
        Veranstaltungsdatenbank Vdb 0.1