减少mysql中的值但不是负数

时间:2013-04-29 11:19:42

标签: mysql decrement

当用户在php和mysql中删除它时,我想减少一个值。我想检查不要低于0.如果值为0则不要减少

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

如果字段 0 ,则不要执行任何操作

7 个答案:

答案 0 :(得分:65)

仅在field更大0

时才添加其他条件进行更新
UPDATE table 
SET field = field - 1
WHERE id = $number
and field > 0

答案 1 :(得分:34)

您可以使用GREATEST()阻止新值降至零以下。如果该值低于零,则零将始终大于您的计算值,从而防止使用低于零的任何值。

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

并注意:请不要再使用mysql_*个功能了。它们已被弃用,最终将从PHP中删除。请改用PDOMySQLi

答案 2 :(得分:7)

使用GREATEST的选项在较新的MySQL版本中不起作用,如果要更新多个字段而不是一个字段,则接受的答案可能无效。我对这个问题的解决方案是使用IF:

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

答案 3 :(得分:2)

UPDATE table SET field = case when (field - 1) >0 then (field - 1)
else field end
WHERE id = $number

答案 4 :(得分:0)

如果该字段是int无符号的,则下面是最好的:

Titanic$categeory <- with(Titanic, ifelse(Age<18,yes = "child2",no = ifelse(Age<=60,yes = "Adult",no = "Senior")))

答案 5 :(得分:-1)

您可以将字段更改为UNSIGNED,并将IGNORE添加到您的查询中:

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

更新 - 这不起作用

答案 6 :(得分:-1)

 UPDATE `table_name` SET field = field-1 WHERE `id` = '".$id."' AND field > 0

注意:字段的数据类型应该是INTEGER。