我想知道如何做到这一点:
我有一个 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/