2016-06-16 5 views
0

Hier ist meine Frage:Wie kann ich mehrere Bedingungen in CASE-Anweisung schreiben?

UPDATE mytable 
SET mycol = mycol + 
      (CASE id 
       WHEN ? THEN 5 
       WHEN ? THEN 10 
       WHEN ? THEN 15 
       WHEN ? THEN 20 
      END) 
WHERE id IN (?, ?, ?, ?) 

Nun, ich brauche für alle diese Bedingungen eine weitere Bedingung zu untersuchen. Also schreibe ich meine Anfrage so:

UPDATE mytable 
SET mycol = mycol + 
      (CASE 
       WHEN id = ? AND $bool THEN 5 
       WHEN id = ? AND $bool THEN 10 
       WHEN id = ? AND $bool THEN 15 
       WHEN id = ? AND $bool THEN 20 
      END) 
WHERE id IN (?, ?, ?, ?) 

Diese^Abfrage funktioniert. Aber wie Sie sehen, habe ich eine konstante Bedingung geschrieben ($bool - das ist eine PHP-Variable, die 1 oder 0 enthält) mehrmals. Jetzt suche ich nach einer MySQL-Syntax, damit ich für alle Fälle einmal $bool schreiben kann. Ist das möglich?

+0

Was ist, wenn '$ bool' falsch ist? Welchen Wert soll der CASE-Ausdruck zurückgeben? –

+0

@GiorgosBetsos Wenn '$ bool' * false * ist, sollte' CASE' Ausdruck nichts zurückgeben ('0'). – stack

Antwort

3

können Sie IF verwenden:

UPDATE mytable 
SET mycol = mycol + IF($bool, (CASE 
            WHEN id = ? THEN 5 
            WHEN id = ? THEN 10 
            WHEN id = ? THEN 15 
            WHEN id = ? THEN 20 
           END), 0) 
WHERE id IN (?, ?, ?, ?) 

Wenn $bool ist true dann wird der Wert durch den CASE Ausdruck zurückgegeben wird mycol hinzugefügt werden, sonst wird 0 hinzugefügt.

+0

Kannst du mir bitte einfach sagen, wie das funktioniert? 'SET rep = rep + (FALL WENN id = 1234 DANN 2 WENN id = 5678 UND FALSCH DANN 15 ENDE)'. Ich meine, was passiert für diese "id = 5678"? – stack

+0

Wie hast du das verstanden? : S +1 – sagi

+1

'id = 5678 AND FALSE' wird immer falsch sein, so wird es nie den Wert' 15' bekommen – sagi

Verwandte Themen