2016-06-16 1 views
0

Вот мой запрос:Как написать несколько условий в инструкции CASE?

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

Ну мне нужно исследовать еще одно условие для всех этих условий. Поэтому я пишу свой запрос следующим образом:

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 (?, ?, ?, ?) 

Этот запрос работает. Но, как вы видите, я написал постоянное условие ($bool - это переменная PHP, которая содержит 1 или 0) несколько раз. Теперь я ищу синтаксис MySQL, который позволяет мне писать $bool один раз для всех случаев. Это возможно?

+0

Что делать, если '$ bool' является ложным? Какое значение вы хотите, чтобы выражение 'CASE' возвращалось? –

+0

@GiorgosBetsos Если '$ bool' равно * false *, выражение' CASE' должно возвращать ничего ('0'). – stack

ответ

3

Вы можете использовать IF:

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 (?, ?, ?, ?) 

Если $bool является true того значения, возвращаемое выражением CASE будет добавлено в mycol, в противном случае 0 добавляется.

+0

Не могли бы вы рассказать мне, как это работает? 'SET rep = rep + (CASE WHEN id = 1234 THEN 2 WHEN id = 5678 И FALSE THEN 15 END)'. Я имею в виду, что происходит для этого 'id = 5678'? – stack

+0

Как вы это поняли? : S +1 – sagi

+1

'id = 5678 И FALSE' всегда будет ложным, поэтому он никогда не получит значение' 15' – sagi