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

标签 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");

最佳答案

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

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

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

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

this StackOverflow answer 中显示了此问题的解决方案.

关于php - MySql:任何方式: UPDATE $tableName SET value=LEAST(value+$change, maxValue),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37899550/

相关文章:

php - 在 CakePHP 中计算关联

php - cakephp saveall 如果在保存之前返回 false 则中断

mysql - 我应该如何解析MySQL中的--secure-file-priv?

java - 使用 php 将特殊字符从 mysqli 数据库传递到 android 应用程序

php - 为什么我的mysql事务不能正常工作?

php - 如何删除数据库“mysql”中的字符

php - 如何隐藏 URL 中包含的高分信息?

java.sql.SQLException : Duplicate entry for key when trying to insert in database from java 异常

mysql - 如何从ID到ID制作MySQL语句

PHP 无休止地加载相同的内容