【发布时间】:2018-09-19 11:29:53
【问题描述】:
我有一个在 MySQL 5.6 版本的 MySQL 工作台程序下完美运行的查询,但是当我尝试在 PHP 环境中测试相同的查询时,出现以下错误:
{
"code": 500,
"response": {
"error": {
"description": "Query error",
"error": {
"errorInfo": [
"42000",
1064,
"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')t1 HAVING price > 0 AND price < 804' at line 1"
]
},
"query": null
}
}
}
查询是这个:
SELECT * FROM(
SELECT t.id,
t.user_id ,
t.invoice_num,
t.registration,
SUM(t.price) as price
FROM t_0 t
WHERE t.brandid=587
GROUP BY t.invoice_num)t1
HAVING price > 0 AND price < 12
ORDER BY id DESC LIMIT 100 OFFSET 0;
在 PHP 环境中,我只是使用 PDO 连接以这种方式执行查询:
$test_query = "here the query that I have";
$result = $con->query($test_query)->fetchAll(PDO::FETCH_ASSOC);
有人可以向我解释导致问题的原因吗? 从我的角度来看,它的语法似乎非常正确。
【问题讨论】:
-
与 sql 相比,该错误显示了不同的价格标准。所以也许你应该显示使用你的查询的 php 代码 sn-p?但我认为 HAVING 应该放在子查询中。它是 GROUP BY 的一部分。或者将 HAVING 更改为 WHERE 子句。
-
感谢@LukStorm 的回复。我已经用 php 部分更新了我的问题。
-
关于 GROUP BY 函数我认为它也可以留在子查询之外。也因为否则mysqlworkbench程序也会给我一个错误。
-
我还使用 WHERE 条件更改了 HAVING,并且在 mysqlworkbench 中它适用于两种情况。但是在 php env 上它会得到相同的输出错误。
-
好吧,php 代码帮不了你太多(不是我的一杯茶)。但是关于 SQL,我知道 MySql 允许选择不属于 group by 的没有聚合功能的字段。但是在其他数据库上或取决于不允许的设置。所以我想知道当它通过 PHP 运行它时,它使用了ONLY_FULL_GROUP_BY 设置。您可以尝试将 MAX 用于
t.id, t.user_id , t.registration。由于您使用的是 SUM,因此 GROUP BY 和 HAVING 应该在子查询中。