Valeur de décrément dans mysql mais pas négative

je veux décrémenter une valeur quand l'utilisateur l'efface dans php et mysql. Je veux vérifier pour ne pas aller en dessous de 0. Si la valeur est 0 alors ne pas décrément .

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

si le champ est 0 alors ne faites rien

34
demandé sur Shikiryu 2013-04-29 15:19:41

6 réponses

ajouter une autre condition pour mettre à jour seulement si le field est plus grand 0

UPDATE table 
SET field = field - 1
WHERE id = $number
and field > 0
58
répondu juergen d 2014-07-11 01:46:08

vous pouvez empêcher la nouvelle valeur de tomber sous zéro en utilisant GREATEST() . Si la valeur descend en dessous de zéro, zéro sera toujours plus grand que votre valeur calculée, empêchant ainsi toute valeur au-dessous de zéro pour être utilisé.

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

et sur une note latérale: S'il vous plaît ne pas utiliser mysql_* fonctions plus. Ils sont dépréciés et seront éventuellement supprimés de PHP. Use PDO ou MySQLi plutôt.

30
répondu Till Helge 2013-04-29 11:22:22

l'option utilisant GREATEST ne fonctionnera pas dans les nouvelles versions MySQL, et la réponse acceptée peut être inutilisable si vous voulez mettre à jour plusieurs champs au lieu d'un seul. Ma solution pour ce problème est d'utiliser si:

UPDATE  table
SET     field = IF(field > 0, field - 1, 0)
WHERE   id = $number
6
répondu Eelco Luurtsema 2015-02-07 15:53:22
UPDATE table SET field = case when (field - 1) >0 then (field - 1)
else field end
WHERE id = $number
1
répondu Niket 2017-10-28 18:13:24

vous pouvez changer votre champ pour être UNSIGNED , et ajouter IGNORE à votre requête:

UPDATE IGNORE table SET field = field - 1 WHERE id = $number

mise à jour-cela ne fonctionne pas

-1
répondu Narek 2017-05-23 12:26:36
 UPDATE `table_name` SET field = field-1 WHERE `id` = '".$id."' AND field > 0

Note: le type de données du champ doit être un entier.

-1
répondu Aatif 2015-10-09 12:31:11