web-dev-qa-db-fra.com

Décrémenter la valeur dans mysql mais pas négatif

Je veux décrémenter une valeur lorsque l'utilisateur la supprime en php et mysql. Je veux vérifier pour ne pas descendre en dessous de 0. Si la valeur est 0 alors ne pas décrémenter.

mysql_query("UPDATE table SET field = field - 1 WHERE id = $number");

Si le champ est alors ne faites rien

39
user2244804

Ajoutez une autre condition pour mettre à jour uniquement si le field est supérieur 0

UPDATE table 
SET field = field - 1
WHERE id = $number
and field > 0
65
juergen d

Vous pouvez empêcher la nouvelle valeur de descendre en dessous de zéro en utilisant GREATEST() . Si la valeur tombe en dessous de zéro, zéro sera toujours supérieur à votre valeur calculée, empêchant ainsi toute valeur inférieure à zéro d'être utilisée.

UPDATE  table
SET     field = GREATEST(0, field - 1)
WHERE   id = $number

Et à côté: s'il vous plaît ne pas utiliser mysql_* fonctionne plus. Ils sont obsolètes et seront finalement supprimés de PHP. Utilisez plutôt PDO ou MySQLi .

34
Till Helge

L'option utilisant GREATEST ne fonctionnera pas dans les versions plus récentes de MySQL, et la réponse acceptée peut être inutile si vous souhaitez mettre à jour plusieurs champs au lieu d'un. Ma solution pour ce problème utilise IF:

UPDATE  table
SET     field = IF(field > 0, field - 1, 0)
WHERE   id = $number
7
Eelco Luurtsema
UPDATE table SET field = case when (field - 1) >0 then (field - 1)
else field end
WHERE id = $number
2
Niket