MySql:任何方式:UPDATE $ tableName SET value = LEAST(value + $ change,maxValue)

时间:2016-06-18 17:04:10

标签: php mysql mysqli

正如问题标题所说,我正在寻找一种只在一个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");

1 个答案:

答案 0 :(得分:2)

我会将此应用程序逻辑放入您的应用程序中,而不是放入数据库(查询)。

也就是说,您可以使用子查询解决此问题:

UPDATE yourTable
SET yourValue = (
    SELECT LEAST(yourValue + $change, yourMax)
    FROM yourTable
    WHERE yourId = $yourId
)
WHERE yourId = $yourId

编辑:MySQL似乎不允许您在子查询中引用您正在更新的表。

此问题的解决方案显示在this StackOverflow answer