Control Flow Functions in Where-Clause

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

  • Control Flow Functions in Where-Clause

    Hallo zusammen...


    ich habe da ein Problem.


    Ich habe in meinem Script eine Variable ($iBedingung) wo entweder 0, 1 oder 2 drinsteht.

    Meine Tabelle sieht von der Strucktur folgendermaßen aus.
    id
    vergleichswert
    timestamp



    nun habe ich mein SELECT, bzw. meinen Ansatz:

    PHP-Code:
    $sQuery 'SELECT id FROM vergleichstabelle
               WHERE timestamp < UNIX_TIMESTAMP()
               CASE '
    .$iBedingung.
                   WHEN 1 THEN vergleichswert BETWEEN 1 AND 28
                   WHEN 2 THEN vergleichswert BETWEEN 19 AND 35
               END
               ORDER BY vergleichswert;'

    Ich hoffe ihr habt verstanden was ich brauche.

    Wenn in $iBedingung eine 1 steht soll der vergleichswert zwischen 1 und 28 liegen, wenn $iBedingung 2 ist dann zwischen 19 und 35 und wenn $iBedingung 0 ist, so ist der Vergleichswert egal.

    Ich weiß, ich könnte mir einfach vorher auch einen Query generieren je nachdem wie $iBedingung ist, ich brauche das gleiche vom prinzip her aber noch an einer anderen Stelle, desswegen würde ich das in diesem Falle auch gerne über eine Control Flow Function machen.


    Vielen Dank schonmal im Voraus
    case
    signed oder unsigned... das ist hier die Frage

  • #2
    Und wo ist jetzt das Problem? Kann keine Frage entdecken.

    Kommentar


    • #3
      PHP-Code:
      $sql 'CASE '.$bedingung'
      WHEN 1 THEN SELECT id FROM table WHERE timestamp<UNIX_TIMESTAMP AND wert BETWEEN 1 AND 28;
      WHEN 2 THEN ...
      END'

      Habe das auf dem Web in dieser Form gefunden. Vielleicht hilfts.

      Gruss

      tobi
      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

      Kommentar


      • #4
        Ich meine, dass man einen case-Block auch innerhalb des Queries setzen kann, so wie er das vorhat. Allerdings fehlt bei ihm die Verknüpfung zwischen den beiden Bedingungen. Leider scheint er ja immer noch keine Frage stellen zu wollen.
        @Topicstarter: Was ist denn nun mit Deinem Ansatz? Mal im PMA ausprobiert? Resultat?

        LG

        Kommentar


        • #5
          @jahlives
          Erstmal danke.
          Das Problem ist aber, dass ich das so auch hinbekommen hätte.

          Ich habe halt nur noch einen anderen Fall, wo ich einen Komplexeren Query habe. Wenn ich diesen Query mehrmals hintereinander mit winzigen änderungen ein ein Case reinpacke habe ich TONNEN von SQL-Code.

          Von daher würde ich dir Bedingung wirklich in der WHERE Bedingung umsetzen.



          Ich weiß leider nicht wie ich die Verbindung machen kann.

          ich habe es mit

          PHP-Code:
          timestamp UNIX_TIMESTAMP()
          CASE 
          '.$iBedingung.' 
                         
          WHEN 1 THEN AND vergleichswert BETWEEN 1 AND 28
                         WHEN 2 THEN 
          AND vergleichswert BETWEEN 19 AND 35
                     END 
          probiert, aber das funktioniert natürlich nicht, das ist ja auch eigentlich ziemlicher unsinn, aber das naheliegenste was mir eingefallen ist.

          Meine Frage ist:

          Wie kann ich die CASE-Funktion in einer WHERE-Bedingung einsetzen wenn ich da vorher schon eine andere Bedingung drin habe. Bzw. wie bekomme ich die richtig verknüpft

          Natürlich habe ich das schon im PMA ausprobiert und natürlich einen syntaxerror zurückbekommen.
          signed oder unsigned... das ist hier die Frage

          Kommentar

          Lädt...
          X