Tento dotaz by vám měl pomoci. Největší věc, kterou dělá, je spočítat VŠECHNY schůzky jako součet a pak SUM na stav KDYŽ =dokončeno, abyste získali celkový i dokončený počet ve stejném dotazu.
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
Také jsem si všiml, že jste říkal, že to byl vztah One to Many. Relační tabulky, jako máte vy, jsou skutečně pro mnohé pro mnohé. Nejúčinnějším způsobem, jak mít One to Many, je zbavit se com_event_schedules_com_appointment_c
tabulku a přidejte com_event_schedule_id
do com_appointments
tabulka.