使用mysqli_query时“无效使用组函数”,而不是直接使用MySql时不存在

时间:2019-02-16 20:16:36

标签: php mysql database mysqli left-join

TLDR: 使用PHP的MySQL时出现Invalid use of group function mysqli_query错误,但直接将完全相同的查询粘贴到MySQL中却没有。

说我有以下表格:

customer
customer_help_request
customer_help_request_status

customer可以有多个customer_help_request(例如,您在网站上写有帮助请求时)。 customer_help_request可以有多个custom_help_request_status,它们可以跟踪帮助请求的状态(例如,待处理,需要进一步调查,已发送电子邮件等)。

我有一个查询来查找在某些状态下有帮助请求的客户。我遇到Invalid use of group function的情况:

(FYI:查询是根据用户选择的多种条件以编程方式构建的,因此查询的形状将不会总是完全像这样。例如,having子句可能会有所不同,具体取决于所选择的过滤类型在用户界面中

SELECT r.customer_id FROM customer_help_request AS r
  JOIN (
    SELECT customer_id, help_request_id FROM customer_help_request
    WHERE help_request_id IN (
      SELECT help_request_id FROM customer_help_request
      GROUP BY help_request_id
      HAVING SUM(CASE WHEN request_closed_date <> "" THEN 1 ELSE 0 END) = 0
    ) AND
    (request_type_id IN ("2"))
    GROUP BY customer_id, help_request_id
  ) AS open_requests
  ON open_requests.help_request_id = r.help_request_id AND open_requests.help_request_id = r.help_request_id
  LEFT JOIN customer_help_request_status AS rs
  ON rs.help_request_id = r.help_request_id
  GROUP BY r.help_request_id
    HAVING SUM(CASE WHEN r.request_type_id = 2 AND STR_TO_DATE(rs.date, "%m/%d/%Y") >= STR_TO_DATE("02/19/2019", '%m/%d/%Y') AND STR_TO_DATE(rs.date, "%m/%d/%Y") <= STR_TO_DATE("02/20/2019", '%m/%d/%Y') THEN 1 ELSE 0 END) > 0;

在连接,子查询和派生表方面我不是最擅长的,所以我在寻找有助于发现查询中的错误(如果有)的两种方法以及更好的主意如何实现我的追求。另外,关于为什么PHP的mysqli会引发错误的任何见解,但是当我转储该查询并将其直接粘贴到MySQL提示中时,我没有任何错误并且得到了有效的结果。

0 个答案:

没有答案