MySQL Update语句中的用户变量

3

假设有一个名为t的MySQL表格和其中一个整数列n。我想知道以下查询语句是否可以修改,使得表达式n - 10只计算一次。

UPDATE t SET n = if(n - 10 < 1, 1, n - 10) WHERE n = 5;
查询没有意义,我知道,但我需要在真实应用程序中使用相同的模式,其中值105将是php变量。

“计算仅一次”准确指什么? - JohnFx
你为什么在意呢?这样做会比实际将结果写入数据库快上数百万倍。 - Adrian Cornish
现在它被计算了两次(对于if中的每个出现)。我希望n-10表达式只出现一次 - 在分配给用户变量的赋值语句中,如下所示:@tmp:= n-10。但我不知道确切的语法。 - clime
2个回答

4

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

UPDATE t SET n = if((@tmp := n - 10) < 1, 1, @tmp) WHERE n = 5;

谢谢,我正试图做这件事情,加上括号让它起作用了。 - Ryan Rapp

-1

你可以在 PHP 中使用这样的逻辑:

$value = $n - 10;
$value = $value < 1 ? 1 : $value;
$sql = "UPDATE t SET n = $value WHERE n = $n";

1
谢谢,但我可能过于简化我的示例了。事实上,我需要根据表中的其他列推导出 n 的结果值。 - clime

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,