mysql decrement

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