【问题标题】:user variables in mysql update statementmysql更新语句中的用户变量
【发布时间】:2012-01-27 02:14:10
【问题描述】:

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

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

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

【问题讨论】:

  • 只计算一次是什么意思?
  • 你为什么在乎它。将结果实际写入数据库将快数百万倍。
  • 好吧,现在计算两次(对于 if 中的每次出现)。我希望 n-10 表达式只出现一次 - 在分配给这样的用户变量时:@tmp := n - 10。但我不知道确切的语法。

标签: mysql sql-update user-variables


【解决方案1】:

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

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

【讨论】:

  • 谢谢,我正试图做这件事,添加括号是它起作用的原因。
【解决方案2】:

你可以在php中做这样的逻辑:

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

【讨论】:

  • 谢谢,但我的例子可能过于简单化了。实际上,我需要根据表中的其他列得出 n 的结果值。
猜你喜欢
  • 2020-10-22
  • 1970-01-01
  • 1970-01-01
  • 2016-06-14
  • 2012-01-18
  • 2013-09-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多