mysql更新语句中的用户变量

mysql更新语句中的用户变量,mysql,sql-update,user-variables,Mysql,Sql Update,User Variables,让t成为mysql表,n成为其中的整数列。如果可以修改以下查询,使表达式n-10只计算一次,我会很感兴趣 UPDATE t SET n = if(n - 10 < 1, 1, n - 10) WHERE n = 5; 更新t集n=if(n-10

t
成为mysql表,
n
成为其中的整数列。如果可以修改以下查询,使表达式
n-10
只计算一次,我会很感兴趣

UPDATE t SET n = if(n - 10 < 1, 1, n - 10) WHERE n = 5;
更新t集n=if(n-10<1,1,n-10),其中n=5;

我知道,这个查询没有意义,但我需要在实际应用程序中使用相同的模式,其中值
10
5
将是php变量。

好吧,我终于找到了正确的语法。
@tmp:=n-10
周围的括号至关重要

UPDATE t SET n = if((@tmp := n - 10) < 1, 1, @tmp) WHERE n = 5;
更新t集n=if((@tmp:=n-10)<1,1,@tmp),其中n=5;

您可以在php中执行以下逻辑:

$value = $n - 10;
$value = $value < 1 ? 1 : $value;
$sql = "UPDATE t SET n = $value WHERE n = $n";
$value=$n-10;
$value=$value<1?1:$价值;
$sql=“UPDATE t SET n=$value,其中n=$n”;

你所说的只精确计算一次是什么意思?如果是,你为什么要在意呢。实际上,将结果写入数据库的速度要快几百万倍。好吧,现在计算两次(对于if中的每一次事件)。我希望n-10表达式只存在一次-在分配给用户变量时,如:@tmp:=n-10。但是我不知道确切的语法。谢谢,但是我可能把我的例子简化了。事实上,我需要根据表中的其他列导出n的结果值。谢谢,我正试图做这件事,加上括号使它工作起来。