Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL函数:在子句中,查询运行两次_Php_Mysql_Sql - Fatal编程技术网

Php MySQL函数:在子句中,查询运行两次

Php MySQL函数:在子句中,查询运行两次,php,mysql,sql,Php,Mysql,Sql,我已经编写了MySQL函数来检索数据库记录的总和 SELECT id, myFunction(id) as price from myTable; 返回: +———————+————————+ | id | price | | 1 | 10 | | 2 | 20 | | 3 | 30 | | 4 | 40 | | 5 | 50 | +———————+————————+ 当我试图将结果的价格限制在20到40

我已经编写了MySQL函数来检索数据库记录的总和

SELECT id, myFunction(id) as price from myTable;
返回:

+———————+————————+
| id    |  price |
|  1    |    10  |
|  2    |    20  |
|  3    |    30  |
|  4    |    40  |
|  5    |    50  |
+———————+————————+
当我试图将结果的价格限制在20到40之间时,出现了一个问题

如果我在HAVING子句中这样做,这个函数将执行两次。第一次是在SelectMyFunction中检索时,第二次是在价格附近

例如:

SELECT id, myFunction(id) as price from myTable HAVING price BETWEEN 20 AND 40.
是否可以将此查询修改为一次性执行?由于计算复杂,所以最好运行两次相同的操作。

使用SUM(id)函数而不是myFunction(id),因为毕竟您只是在计算id之和,请使用此查询

从myTable中选择id,SUM(id)作为价格,其中价格介于20和40之间

始终使用having with groupby子句。

您可以尝试使用如下子查询“具体化”结果:

SELECT * FROM
(SELECT id, myFunction(id) AS price FROM myTable) t
WHERE price BETWEEN 20 AND 40

myFunction
到底做什么?如果您只是检索总和,那么为什么不使用
sum()
而不是
myFunction()
?您如何知道它被执行了两次?@user2269315,您基本上重复了我上面的评论。