Ответ 1
Добавьте еще одно условие для обновления, только если field
больше 0
UPDATE table
SET field = field - 1
WHERE id = $number
and field > 0
Я хочу уменьшить значение, когда пользователь удаляет его в php и mysql. Я хочу проверить, чтобы не идти ниже нуля. Если значение равно 0, то не декремент.
mysql_query("UPDATE table SET field = field - 1 WHERE id = $number");
Если поле 0, то ничего не делайте
Добавьте еще одно условие для обновления, только если field
больше 0
UPDATE table
SET field = field - 1
WHERE id = $number
and field > 0
Вы можете помешать новому значению опуститься ниже нуля, используя GREATEST()
. Если значение падает ниже нуля, ноль всегда будет больше, чем вычисленное значение, тем самым предотвращая использование любого значения ниже нуля.
UPDATE table
SET field = GREATEST(0, field - 1)
WHERE id = $number
И на стороне примечания: Пожалуйста, не используйте функции mysql_*
больше. Они устарели и в конечном итоге будут удалены с PHP. Вместо этого используйте PDO или MySQLi.
Опция, использующая GREATEST, не будет работать в новых версиях MySQL, и принятый ответ может оказаться непригодным, если вы хотите обновить несколько полей вместо одного. Мое решение для этой проблемы использует IF:
UPDATE table
SET field = IF(field > 0, field - 1, 0)
WHERE id = $number
UPDATE table SET field = case when (field - 1) >0 then (field - 1)
else field end
WHERE id = $number
если поле 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
Вы можете изменить свое поле как UNSIGNED
и добавить IGNORE
к вашему запросу:
UPDATE IGNORE table SET field = field - 1 WHERE id = $number
UPDATE `table_name` SET field = field-1 WHERE `id` = '".$id."' AND field > 0
Примечание: полевой тип данных должен быть INTEGER.