Decremento de valor en mysql pero no negativo
(6)
Quiero disminuir un valor cuando el usuario lo elimine en php y mysql. Quiero comprobar que no vaya por debajo de 0. Si el valor es 0, no disminuya .
mysql_query("UPDATE table SET field = field - 1 WHERE id = $number");
Si el campo es 0, entonces no hagas nada
Agregue otra condición para actualizar solo si el field
es mayor 0
UPDATE table
SET field = field - 1
WHERE id = $number
and field > 0
La opción de utilizar GREATEST no funcionará en versiones más nuevas de MySQL, y la respuesta aceptada puede ser inútil si desea actualizar varios campos en lugar de uno. Mi solución para este problema es usar IF:
UPDATE table
SET field = IF(field > 0, field - 1, 0)
WHERE id = $number
Puede evitar que el nuevo valor caiga bajo cero usando GREATEST()
. Si el valor cae por debajo de cero, cero siempre será mayor que su valor calculado, evitando así que se use cualquier valor por debajo de cero.
UPDATE table
SET field = GREATEST(0, field - 1)
WHERE id = $number
Y en una nota al margen: no use mysql_*
funciones mysql_*
. Están en desuso y eventualmente se eliminarán de PHP. Use PDO o MySQLi en MySQLi lugar.
Puedes cambiar tu campo para que UNSIGNED
y agregar IGNORE
a tu consulta:
UPDATE IGNORE table SET field = field - 1 WHERE id = $number
ACTUALIZACIÓN - Esto no funciona
UPDATE `table_name` SET field = field-1 WHERE `id` = ''".$id."'' AND field > 0
Nota: el tipo de datos del campo debe ser INTEGER.
UPDATE table SET field = case when (field - 1) >0 then (field - 1)
else field end
WHERE id = $number