Est-il possible de faire une requête UPDATE dans MySQL qui met à jour la valeur du champ uniquement si certaines conditions sont remplies? Quelque chose comme ça:
UPDATE test
SET
CASE
WHEN true
THEN field = 1
END
WHERE id = 123
En d'autres termes:
UPDATE test
SET
something = 1, /*field that always gets updated*/
CASE
WHEN true
THEN field = 1 /*field that should only get updated when condition is met*/
END
WHERE id = 123
Quelle est la bonne façon de faire cela?
Oui!
Ici vous avez un autre exemple:
UPDATE prices
SET final_price= CASE
WHEN currency=1 THEN 0.81*final_price
ELSE final_price
END
Cela fonctionne car MySQL ne met pas à jour la ligne. S'il n'y a pas de changement, comme indiqué dans docs :
Si vous définissez une colonne sur la valeur actuelle, MySQL le remarquera et ne le met pas à jour.
Une autre solution qui, à mon avis, est plus facile à lire serait:
UPDATE test SET something = 1, field = IF(condition is true, 1, field) WHERE id = 123
Cela permet de définir "champ" sur 1 (comme OP utilisé à titre d'exemple) si la condition est remplie et d'utiliser la valeur actuelle de "champ" si elle n'est pas remplie. Utiliser la valeur précédente revient à ne pas changer, alors voilà.
Essaye ça:
UPDATE test
SET
field = 1
WHERE id = 123 and condition
Une autre solution consiste à utiliser la fonction conditionnelle MySQL IF()
:
UPDATE test
SET field = IF(something == 1{CONDITION}, 1 {NEW VALUE}, field)
WHERE `id` = 5
Une autre variante:
UPDATE test
SET field = IF ( {condition}, {new value}, field )
WHERE id = 123
Ceci mettra à jour la field
avec {new value}
uniquement si {condition}
est rencontré.