Подтвердить что ты не робот

Значение Decrement в mysql, но не отрицательное

Я хочу уменьшить значение, когда пользователь удаляет его в php и mysql. Я хочу проверить, чтобы не идти ниже нуля. Если значение равно 0, то не декремент.

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

Если поле 0, то ничего не делайте

4b9b3361

Ответ 1

Добавьте еще одно условие для обновления, только если field больше 0

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

Ответ 2

Вы можете помешать новому значению опуститься ниже нуля, используя GREATEST(). Если значение падает ниже нуля, ноль всегда будет больше, чем вычисленное значение, тем самым предотвращая использование любого значения ниже нуля.

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

И на стороне примечания: Пожалуйста, не используйте функции mysql_* больше. Они устарели и в конечном итоге будут удалены с PHP. Вместо этого используйте PDO или MySQLi.

Ответ 3

Опция, использующая GREATEST, не будет работать в новых версиях MySQL, и принятый ответ может оказаться непригодным, если вы хотите обновить несколько полей вместо одного. Мое решение для этой проблемы использует IF:

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

Ответ 4

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

Ответ 5

если поле int без знака, ниже лучше всего:

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

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

Ответ 6

Вы можете изменить свое поле как UNSIGNED и добавить IGNORE к вашему запросу:

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

UPDATE - это не работает

Ответ 7

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

Примечание: полевой тип данных должен быть INTEGER.