TLDR: Я получаю ошибку MySQL
Invalid use of group function
, когда использую PHP 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: запрос программно построен из нескольких условий, которые выбирает пользователь, поэтому форма запроса не всегда будет точно такой же.различаются, например, в зависимости от того, какой тип фильтрации был выбран в пользовательском интерфейсе)
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, я не получу ошибку и получу действительные результаты.