Ankündigung

Einklappen
Keine Ankündigung bisher.

Eine art if in MySQL

Einklappen

Neue Werbung 2019

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

  • Eine art if in MySQL

    Hallo
    wie könnte man das folgende in MySQL umsetzen ?

    Code:
    SELECT name
        FROM artikel
     WHERE id = 1
     IF(schauComments == 1)
     BEGIN
        AND comments > 0
     END


    schauComments ist ein Feld das ich auf 1 setzen kann, wenn ich Artikel
    mit Kommentaren gelistet haben will.

    Also wenn schauComments deaktiviert ist, soll garnicht auf die comments
    geachtet werden.


  • #2
    Code:
    WHERE schauComments = 0 OR (schauComments == 1 AND comments > 0)
    Dafür braucht man keine Abfrage.

    Kommentar


    • #3
      Genauer
      Code:
      SELECT name
      FROM   artikel
      WHERE  id = 1
             AND
             (
             schauComments != 1
             OR
             comments > 0
             )
      Der Vergleich ist übrigens = in SQL.

      Kennt Ihr eigentlich NULL-safe equal? Jemand schon mal benutzt? Ist das Standard-SQL?
      --

      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
      Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


      --

      Kommentar


      • #4
        Zitat von hoctar Beitrag anzeigen
        Hallo
        wie könnte man das folgende in MySQL umsetzen ?

        Code:
        SELECT name
            FROM artikel
         WHERE id = 1
         IF(schauComments == 1)
         BEGIN
            AND comments > 0
         END
        Dazu mehrere Fragen:

        1. Welche Datenbank kann so einen SQL?
        2. Ist "schauComments" eine Spalte der Tabelle ARTIKEL oder eine Programmvariable?
        3. Wie hängen die Prädikate :

        Code:
        ..
         WHERE id = 1
         IF(schauComments == 1)
        ..
        logisch zusammen? Mit AND oder OR ...? Verstehe ich auf jeden Fall nicht.

        Zitat von nikosch
        Kennt Ihr eigentlich NULL-safe equal? Jemand schon mal benutzt? Ist das Standard-SQL?
        Ich denke "<=>" ist nicht SQL Standard, mit ORACLE geht es schon mal nicht. Als Standardlösung für NULL Vergleiche bietet sich "IS NULL" und COALESCE() an.

        Grüße
        Thomas

        Kommentar


        • #5
          gelöscht

          Kommentar


          • #6
            Wenn du je nachdem welche Werte in bestimmten Spalten stehen andere auslesen willst, gibt es noch die CASE anweisungen und IF's gibts auch in mysql

            Aus mysql kopiert, hab ich bisher nur ein oder zweimal benutzt, weil glaub ich auch relativ unperformant ist, lege da aber meine Hand nicht ins feuer für...
            Code:
            CASE case_value
                WHEN when_value THEN statement_list
                [WHEN when_value THEN statement_list] ...
                [ELSE statement_list]
            END CASE
            MySQL :: MySQL 5.1 Referenzhandbuch :: 19.2.10.2 CASE-Anweisung

            Dann gibts da noch:
            Code:
            IF(expr1,expr2,expr3)                    
            Wenn expr1 TRUE ist (expr1<> 0 und expr1 <> NULL), dann gibt IF() expr2 zurück;  andernfalls gibt es expr3 zurück.           
            IF() gibt je nach  Verwendungskontext einen numerischen oder einen String-Wert zurück.         
              
            
            mysql> SELECT IF(1>2,2,3);
                    -> 3
            mysql> SELECT IF(1<2,'yes','no');
                    -> 'yes'
            mysql> SELECT IF(STRCMP('test','test1'),'no','yes');
                    -> 'no'
            des weiteren gibts glaub ich noch IFNULL(myRowCheckIsNull, row1, row2)
            "My software never has bugs, it just develops random features."
            "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

            Kommentar


            • #7
              Vielen Dank an alle

              Kommentar

              Lädt...
              X