SELECT events.id, events.name, events.code, event_statuses.name as event_status_name
, regions.name as event_region_name, event_locations.name as event_location_name
, events.date_1, events.date_2
, count(r.id) as regs
FROM events
INNER JOIN event_locations ON event_locations.id = events.event_location_id
INNER JOIN event_statuses ON event_statuses.id = events.event_status_id
LEFT OUTER JOIN regions ON regions.id = events.region_id
LEFT OUTER JOIN registrations as r ON events.id = r.event_id and r.registration_status_id = 4
WHERE 1 GROUP BY events.id ORDER BY date_1 DESC LIMIT 0, 50
ご覧のとおり、私のクエリには集計関数があり、イベントごとにグループ化された登録に対して実行されます。
ただし、GROUP BY
このクエリには別の集計関数がない別のクエリが必要です。ここでのポイントは、イベントリストをリージョンごとにグループ化することです。これで、イベントの並べ替えが重要になります。それらが並べ替えられている場合regs
-ボストンからのすべてのイベントがまとめて表示され、次にregで並べ替えられます。したがって、別のGroupByが必要です。これは私が思いついたものですが、これも機能していません:
SELECT events.id, events.name, events.code, event_statuses.name as event_status_name
,regions.name as event_region_name, event_locations.name as event_location_name
, events.date_1, events.date_2, r.regs
FROM events
INNER JOIN event_locations ON event_locations.id = events.event_location_id
INNER JOIN event_statuses ON event_statuses.id = events.event_status_id
LEFT OUTER JOIN regions ON regions.id = events.region_id
LEFT OUTER JOIN
(Select event_id, count(id) as regs
from registrations where registration_status_id = 4
group by event_id) r on events.id = r.event_id
WHERE 1 GROUP BY events.region_id, events.id ORDER BY date_1 DESC LIMIT 0, 50
まだ地域ごとにグループ化することはできません。