如果单行的值大于某值,Mysql 就会递减它们

标签 mysql request sql-update row

我想知道如何做到这一点:

我有一个 Mysql 表,其中有几十个我想要更新的列。但此更新涉及单行的所有列。 因此,我需要更新该特定行的每一列,以便如果它们的值大于引用,则它们应该减少 1。

到目前为止,我能想到的就是这样的东西,但显然,这是一个异端:

    $sql= mysqli_query($con,"UPDATE table SET columnA = columnA-1 WHERE (columnA > ".$val." AND id = 1 ");
    $sql= mysqli_query($con,"UPDATE table SET columnB = columnB-1 WHERE (columnB > ".$val." AND id = 1 ");  
    $sql= mysqli_query($con,"UPDATE table SET columnC = columnC-1 WHERE (columnC > ".$val." AND id = 1 ");
    .....(22 times)....
    $sql= mysqli_query($con,"UPDATE table SET columnZ = columnZ-1 WHERE (columnZ > ".$val." AND id = 1 ");

所以:

1) 语法是否可以满足我的要求(如果值大于 $val,则减 1?

2):我怎样才能不访问数据库这么多次只是为了更新单行的所有列?难道只有这样才有可能吗?

感谢您的帮助。

最佳答案

您可以在此处使用 CASE 表达式:

UPDATE yourTable
SET
    columnA = CASE WHEN columnA > val THEN columnA - 1 ELSE columnA END,
    columnB = CASE WHEN columnB > val THEN columnB - 1 ELSE columnB END,
    columnC = CASE WHEN columnC > val THEN columnC - 1 ELSE columnC END,
    ...
WHERE
    id = 1;

此解决方案还消除了与数据库进行多次单独往返的问题。相反,上述更新将作为单个语句/事务执行。

关于如果单行的值大于某值,Mysql 就会递减它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55624900/

相关文章:

MySQL:选择两个数据库中时间戳不匹配的所有行

php - 在 php 中创建 Web 服务 api 以从数据库获取数据,记录以印地语格式存储在数据库中

mysql - 它不会显示父表中的名称,仅显示数字或 ID

mysql - 使用输入中的常量值更新列字段累积和

mysql - 将 select 语句转换为更新(包括 exists & having)

MySQL——你如何找到精确到毫秒的时间?

Python 请求 : figuring out request full size

gwt - 如何正确添加 RequestContexts

java - Ajax请求XSS过滤器

c# - 如果值存在则更新,否则将值插入数据库