正如问题标题所说,我正在寻找一种只在一个sql调用中实现此目的的方法:
UPDATE accountEnergy SET value=LEAST(value+$energyChange, maxValue)
我的解决方案有两个电话:
mysqli_query($db, "UPDATE accountEnergy SET value=value+$energyChange WHERE accountId=$accountId");
mysqli_query($db, "UPDATE accountEnergy SET value=maxValue WHERE accountId=$accountId AND value>maxValue");
答案 0 :(得分:2)
我会将此应用程序逻辑放入您的应用程序中,而不是放入数据库(查询)。
也就是说,您可以使用子查询解决此问题:
UPDATE yourTable
SET yourValue = (
SELECT LEAST(yourValue + $change, yourMax)
FROM yourTable
WHERE yourId = $yourId
)
WHERE yourId = $yourId
编辑:MySQL似乎不允许您在子查询中引用您正在更新的表。
此问题的解决方案显示在this StackOverflow answer。
中