このクエリはあなたを助けることができるはずです。それが行う最大のことは、すべての予定を合計でカウントし、IFステータス=完了で合計して、同じクエリで合計と完了の両方を取得することです。
SELECT
sc.id,
COUNT(ap.id) as total,
SUM(IF(status = 'completed', 1, 0)) as completed
FROM
com_event_schedules sc
LEFT JOIN
com_event_schedules_com_appointment_c re
ON re.com_event_schedules_com_appointmentcom_event_schedules_ida = sc.id
LEFT JOIN
com_appointment ap
ON re.com_event_schedules_com_appointmentcom_appointment_idb = ap.id
WHERE
sc.deleted = 0
GROUP BY
sc.id
また、1対多の関係だとおっしゃっていました。あなたが持っているようなリレーショナルテーブルは、本当に多対多のためのものです。 1対多にする最も効率的な方法は、com_event_schedules_com_appointment_c
を取り除くことです。 テーブルを作成し、com_event_schedule_id
を追加します com_appointments
へ テーブル。