web-dev-qa-db-ja.com

if条件でmysqlを更新する

条件付きクエリに大きな問題があるようです:(条件付き更新を行わなければなりません。

 if(select tipo from abbonamento where idU=17)='punti' then     
 update abbonamento set punti=punti-1 
 else
 update abbonamento set bonus=bonus-1

明らかにこれは機能しません。何か案が?

38
Martina

MySQLIFステートメントをサポートします。

UPDATE  abbonamento
SET     punti = IF(tipo = 'punti', punti - 1, punti),
        bonus = IF(tipo <> 'punti', bonus - 1, bonus)
WHERE   id = 17

または、CASEを使用することもできます

UPDATE  abbonamento
SET     punti = CASE WHEN tipo = 'punti' THEN punti - 1 ELSE punti END,
        bonus = CASE WHEN tipo <> 'punti' THEN bonus - 1 ELSE bonus END
WHERE   id = 17
102
John Woo