Mysql сравнивает два результата group_concat друг с другом

У меня есть стол events и стол invoices

каждый event может иметь до 5 invoices (счета имеют event_id и могут иметь только одно событие)

Каждый счет имеет два поля: «отменено» и «paperwork_received_datestamp». Мы рассматриваем «полностью завершенное событие», поскольку каждый неотменяемый счет-фактура имеет дату, введенную для этого поля. Мне нужно показать список только «полностью завершенных событий».

У меня есть этот запрос

SELECT
Event.id,
GROUP_CONCAT(Invoice.cancelled) AS "cancelled_status",
GROUP_CONCAT(IF(Invoice.paperwork_received_datestamp IS NOT NULL, "installed", "not_installed")) AS "paperwork_status"FROM
`events` `Event`
LEFT JOIN invoices Invoice ON Invoice.event_id = Event.id
WHERE
YEAR(Invoice.submit_date) = 2015
GROUP BY
Event.id

Это производит вывод, такой как

Event ID ---- cancelled_status---- paperwork_status

23562 --------no,no,no ------------installed,installed,installed (this row should show up)

21563 -------no,no,yes -------------installed,installed,not_installed (this row should show up)

24672 --------no,no ----------------installed,not_installed (this row shouldn't show up)

25784 ----------yes,yes -------------not_installed,not_installed (this row shouldn't show up)

Единственный способ, которым я могу думать, — это использовать разнесение в обоих полях group_concat в PHP и циклически проходить по каждой строке, использовать некоторую логику и исключать строки, которые я хочу исключить, для создания списка. Я бы предпочел сделать это в MySQL. Есть идеи?

0

Решение

Извините, ребята, я понял ответ. (Я открыт для лучших способов сделать это, хотя)

SELECT
GROUP_CONCAT(IF(Invoice.cancelled = "NO" && Invoice.paperwork_received_datestamp IS NULL, "incomplete", "complete")) AS "test"FROM
`events` `Event`
LEFT JOIN invoices Invoice ON Invoice.event_id = Event.id
WHERE
YEAR(Invoice.submit_date) = 2015
GROUP BY
Event.id
HAVING
INSTR(test, 'i') = 0 /* removes all incompletes */
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]