我想知道我该怎么做:
我有一个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):我怎样才能不访问数据库那么多次而只是更新一行的所有列?只能吗?
谢谢您的帮助。
答案 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;
此解决方案还消除了往返数据库多次往返的问题。相反,以上更新将作为单个语句/事务执行。