Derk: WHERE status IN

Guten Abend,

ich dachte mit

WHERE status IN (1, 2) ORDER by id DESC

sage ich, dass ich nur die Datensätze haben möchte die den status 1 ODER 2 haben? In meiner Datenbank befinden sich auch noch Datensätze die den status 3 haben, die möchte ich nicht mit auslesen.

Was mache ich falsch?

  1. Guten Abend,

    so geht es

    WHERE status 1 AND status 2  AND NOT status = 3
    
    1. Hallo Derk,

      so geht es

      WHERE status 1 AND status 2  AND NOT status = 3
      

      Das wäre äußerst blöd, wenn du 100 Status hättest.

      where status = 1 or status = 2
      

      Bis demnächst
      Matthias

      --
      Das Geheimnis des Könnens liegt im Wollen. (Giuseppe Mazzini)
      1. Hallo Matthias,

        hab noch eine andere Lösung verstanden. Ich glaube diese ist besser, denn ich sage welche IDs ich NICHT haben möchte:

        AND NOT status = 3
        

        Hab ich hier https://dev.mysql.com/doc/refman/5.1/en/non-typed-operators.html gelesen.

    2. Tach!

      so geht es

      WHERE status 1 AND status 2  AND NOT status = 3
      

      garantiert nicht, denn das ist syntaktisch und logisch falsch. Gesetzt den Fall, nach den ersten beiden status stehen bei dir Gleichheitszeichen, dann kann ich dir versprechen, dass der Status nie gleichzeitig 1 AND 2 sein kann. Du musst beim Formulieren deiner Abfragen stets im Hinterkopf haben, dass die Bedingungen auf jeden Datensatz einzeln angewendet werden und nicht auf die gesamte Menge, sowie dass die Logikoperatoren etwas anders funktionieren als die umgangssprachlichen "und" und "oder".

      dedlfix.

  2. Tach!

    ich dachte mit

    WHERE status IN (1, 2) ORDER by id DESC
    

    sage ich, dass ich nur die Datensätze haben möchte die den status 1 ODER 2 haben?

    Ja, außerdem sagst du damit, dass die Ergebnismenge absteigend nach der id sortiert sein soll. Letzteres ist meist keine gescheite Vorgehensweise, weil eine ID identifizieren soll und nicht zwangsläufig garantiert zeitlich aufsteigende Werte hat.

    In meiner Datenbank befinden sich auch noch Datensätze die den status 3 haben, die möchte ich nicht mit auslesen.

    Was mache ich falsch?

    Kann ich dir nicht sagen, weil ich aus dem kleinen Stückchen keinen allgemeinen Fehler erkennen kann. Die Datenbankstruktur und Beispieldatensätze wären zur Analyse hilfreich.

    dedlfix.