如果单行的Mysql递减值大于某个值

时间:2019-04-11 04:48:22

标签: 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):我怎样才能不访问数据库那么多次而只是更新一行的所有列?只能吗?

谢谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您可以在此处使用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;

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