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提示中时,我没有任何错误并且得到了有效的结果。