Dennis 2: IF in WHERE Abfrage

Ich habe eine PHP Varibale
$staat=12;

Nun möchte ich diese in einer SELECT Abfrage abfragen, wenn Sie Vorhanden, also grösser als 0 ist.

SELECT * FROM table WHERE (IF '$staat'>0 THEN staat='$staat')

doch irgendwas mache ich da falsch?

Dennis

  1. Ich habe eine PHP Varibale
    $staat=12;

    Nun möchte ich diese in einer SELECT Abfrage abfragen, wenn Sie Vorhanden, also grösser als 0 ist.

    SELECT * FROM table WHERE (IF '$staat'>0 THEN staat='$staat')

    doch irgendwas mache ich da falsch?

    NACHTRAG:
    -----------------------------------------------------------------------

    SELECT * FROM table WHERE IF('$staat'>0, staat='$staat', 0)

    Funktioniert (fast) nur wird wenn $staat>0 nicht zutriff eine 0 bearbeitet, es soll aber NIX bearbeitet werden...
    Wie kann ich meiner Anweisung das klarmachen.

    Dennis

    1. Hi,

      warum willst du denn überhaupt einen Wert, den du bereits in PHP vorliegen hast, noch mal von der Datenbank selektieren lassen?

      SELECT * FROM table WHERE IF('$staat'>0, staat='$staat', 0)

      Funktioniert (fast) nur wird wenn $staat>0 nicht zutriff eine 0 bearbeitet, es soll aber NIX bearbeitet werden...

      Von was für einer „Bearbeitung“ redest du denn hier?

      MfG ChrisB

      --
      Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/
    2. Hello,

      SELECT * FROM table WHERE IF('$staat'>0, staat='$staat', 0)

      Funktioniert (fast) nur wird wenn $staat>0 nicht zutriff eine 0 bearbeitet, es soll aber NIX bearbeitet werden...

      Soll keine Abfrage duchgeführt werden, oder nicht gefiltert werden, wenn $staat == 0 ist?

      Die erste Möglichkeit liefert gar kein Ergbebnis, die zweite alle Datensätze, vobehaltlich, dass es keine weiteren Filter mehr gibt.

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
       ☻_
      /▌
      / \ Nur selber lernen macht schlau
      http://bikers-lodge.com
      1. Soll keine Abfrage duchgeführt werden, oder nicht gefiltert werden, wenn $staat == 0 ist?

        Wenn $staat grösser als 0 ist soll gefiltert werden, wenn staat==0 ist soll der Filter staat weggelassen werden, als sei er nicht vorhanden und der Rest ausgegeben werden.

        1. Hello,

          Soll keine Abfrage duchgeführt werden, oder nicht gefiltert werden, wenn $staat == 0 ist?

          Wenn $staat grösser als 0 ist soll gefiltert werden, wenn staat==0 ist soll der Filter staat weggelassen werden, als sei er nicht vorhanden und der Rest ausgegeben werden.

          Na, dann hast Du ja von mir zwei Lösungswege bekommen:
          https://forum.selfhtml.org/?t=217285&m=1492038

          Da fehlte noch irgenwo eine Klammer } , aber das findest du bestimmt selber :-)

          Liebe Grüße aus dem schönen Oberharz

          Tom vom Berg

          --
           ☻_
          /▌
          / \ Nur selber lernen macht schlau
          http://bikers-lodge.com
  2. IF in WHERE Abfrage

    Karl-Franz zu Ferdinand von und bei Dümpelshofen.

    Ich habe eine PHP Varibale
    $staat=12;

    Nun möchte ich diese in einer SELECT Abfrage abfragen, wenn Sie Vorhanden, also grösser als 0 ist.

    SELECT * FROM table WHERE (IF '$staat'>0 THEN staat='$staat')

    doch irgendwas mache ich da falsch?

    Gemessen an deiner Beschreibung ist dir nicht so ganz klar, was du wirklich möchtest.

    Vorneweg: Dass eine Variable vorhanden ist und der Umstand, dass ihr Wert größer als Null ist, sind zwei völlig unterschiedliche Paar Schuhe. Eine Variable ist auch vorhanden, wenn ihr Wert gleich Null oder kleiner Null ist. Sie kann, je nach Definition, sogar vorhanden sein, wenn sie gar keinen Wert hat.

    Deinem SQL-Befehl verstehe ich nicht wirklich. Möchtest du alle Zeilen auslesen, deren Spalte staat dem Wert der PHP-Variablen $staat entspricht, vorausgesetzt, $staat ist größer als Null? Dann:

    if ($staat > 0) {
        machsql("SELECT * FROM table WHERE staat='$staat');
    }

    Du brauchst nicht zum Bäcker zu fahren, wenn du eh keine Brötchen haben möchtest. Genauso brauchst du nicht die Datenbank bemühen, wenn du eh nichts haben willst, weil $staat kleiner oder gleich Null ist.

    (Davon unabhängig möchtest du dich informieren, wie Variablen in SQL eingebettet werden. So, wie du und ich das da oben gemacht haben, ist das eigentlich bäh!.)

    1. Lieber Karl-Franz zu Ferdinand von und bei Dümpelshofen,

      in meienr Tabelle ist die Spalte staat

      if, titel, staat, stadt
      --------------------------------
      1   hallo   2    5
      2   huhuh   2    4
      2   hihih   1    4

      ich möchte entweder alle

      SELECT * FROM table

      oder eben wenn die Variablen staat bzw. stadt einen Wert haben nur diese übereinstimmenden

      deshalb die IF abfrage

      SELECT * FROM table WHERE staat=2

      dann kommen die Datensätze

      if, titel, staat, stadt
      --------------------------------
      1   hallo   2    5
      2   huhuh   2    4

      wenn aber staat=0 ist

      sollen eben alle Datensätze kommen

      SELECT * FROM table WHERE if('$staat'>0 THEN staat='$staat')

      Aber so schauts gut aus geht aber nicht...

      Dennis der in einem kleinen Ort wohnt

      1. IF in WHERE Abfrage

        Karl-Franz zu Ferdinand von und bei Dümpelshofen

        deshalb die IF abfrage

        SELECT * FROM table WHERE staat=2

        dann kommen die Datensätze

        if, titel, staat, stadt

        1   hallo   2    5
        2   huhuh   2    4

        wenn aber staat=0 ist

        sollen eben alle Datensätze kommen

        Wie im Ansatz schon geschrieben: Prüfe PHP-seitig $staat > 0 und führe den entsprechenden SQL-Befehl aus:

        if ($staat > 0) {
            machsql("select * from tabelle where staat=" . $staat);
        }
        else {
            machsql("select * from tabelle");
        }

        Dein Versuch, die Prüfung in die Datenbank auszulagern, läuft im Falle von $staat <= 0 auf den SQL-Befehl "select * from tabelle where true" hinaus. Eine where-Klausel, deren Ergebnis von vornherein feststeht (nämlich "ja"), ist überflüssig. Vermeide sie.

  3. Hello,

    Nun möchte ich diese in einer SELECT Abfrage abfragen, wenn Sie Vorhanden, also grösser als 0 ist.

    SELECT * FROM table WHERE (IF '$staat'>0 THEN staat='$staat')

    doch irgendwas mache ich da falsch?

    Das Where-Statement muss auch einen Inhalt haben, wenn es vorhanden ist.
    Welchen Inhalt hat es denn bei Dir im Falle <= 0?

    http://dev.mysql.com/doc/refman/5.1/en/control-flow-functions.html#function_if

    So ginge es, der Datenbank die Last aufzubürden:

    SELECT * FROM table WHERE staat = IF($staat > 0, $staat, staat);

    Aber da Du ja augenscheinlich bereits PHP benutzt, kannst Du das Where-Statement doch gleich mit PHP zusammenbauen und nur dann anfügen, wenn mindetens eine Where-Klausel vorhanden ist.

    $where = '';

    if($staat > 0) { $where .= 'staat= $staat ';
    if(strlen($where) > 0) {$where = 'WHERE '.$where; }

    SELECT * FROM table $where;

    Steht denn 0 oder NULL in dem Feld?

    http://dev.mysql.com/doc/refman/5.1/en/control-flow-functions.html#function_ifnull

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bikers-lodge.com
    1. Hello,

      Nun möchte ich diese in einer SELECT Abfrage abfragen, wenn Sie Vorhanden, also grösser als 0 ist.

      SELECT * FROM table WHERE (IF '$staat'>0 THEN staat='$staat')

      doch irgendwas mache ich da falsch?

      Das Where-Statement muss auch einen Inhalt haben, wenn es vorhanden ist.
      Welchen Inhalt hat es denn bei Dir im Falle <= 0?

      http://dev.mysql.com/doc/refman/5.1/en/control-flow-functions.html#function_if

      So ginge es, der Datenbank die Last aufzubürden:

      SELECT * FROM table WHERE staat = IF($staat > 0, $staat, staat);

      Aber da Du ja augenscheinlich bereits PHP benutzt, kannst Du das Where-Statement doch gleich mit PHP zusammenbauen und nur dann anfügen, wenn mindetens eine Where-Klausel vorhanden ist.

      $where = '';

      if($staat > 0) { $where .= 'staat= $staat ';
      if(strlen($where) > 0) {$where = 'WHERE '.$where; }

      SELECT * FROM table $where;

      Steht denn 0 oder NULL in dem Feld?

      http://dev.mysql.com/doc/refman/5.1/en/control-flow-functions.html#function_ifnull

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      Ich denke, das ist die einfachste und sauberste Art,

      Danke