我有这样的查询:
UPDATE users SET reputation = reputation - 2 WHERE id = :id
当前reputation
为0
时,有时会抛出错误。由于reputation
列为unsigned
。有什么想法我怎么解决这个问题?
答案 0 :(得分:1)
您可以使用CASE WHEN
设置值,如果它是正值或默认值为负值:
UPDATE users
SET reputation = (CASE WHEN (reputation - 2 >= 0) THEN reputation - 2 ELSE 0 END)
WHERE id = :id
如果值小于0(在本例中为ELSE
),您可以在0
部分设置默认值。
正如@stack在答案中已经提到的,你可以使用GREATEST
(而不是CASE WHEN
):
UPDATE users
SET reputation = GREATEST(reputation - 2, 0)
WHERE id = :id
如果您不希望UPDATE
出现这种情况,可以查看WHERE
上的值:
UPDATE users
SET reputation = reputation - 2
WHERE id = :id
AND (reputation - 2) >= 0
答案 1 :(得分:1)
使用GREATEST()
:
UPDATE users SET reputation = GREATEST(reputation - 2, 1) WHERE id = :id
如果reputation
是zerofill
,那么GREATEST(reputation - 2, 0)
。