【问题标题】:MySQL query works on mysqlworkbench but not on php environmentMySQL 查询适用于 mysqlworkbench 但不适用于 php 环境
【发布时间】: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 应该在子查询中。

标签: php mysql


【解决方案1】:

尝试将查询更改为几乎适用于任何数据库的查询?
(几乎是因为LIMIT 可以是特定于数据库的。F.e. MS SQL Server 改用TOP

SELECT 
 MAX(t.id) AS id, 
 MAX(t.user_id) AS user_id, 
 t.invoice_num, 
 MAX(t.registration) AS registration, 
 SUM(t.price) as price
FROM t_0 t 
WHERE t.brandid = 587
GROUP BY t.invoice_num
HAVING SUM(t.price) BETWEEN 1 AND 11
ORDER BY id DESC 
LIMIT 100 OFFSET 0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    • 2012-12-17
    • 2020-08-23
    • 2021-02-23
    • 2020-08-21
    • 2013-11-13
    • 1970-01-01
    相关资源
    最近更新 更多