mysql — получить количество вхождений

#php #mysql #group-by #sum #left-join

Вопрос:

Привет, я пытаюсь заставить работать запрос mysql и нуждаюсь в некоторой помощи. У меня есть 2 столика (персонал, бронирование).

Таблица персонала содержит сведения о персонале

СтаффИД Имя пользователя Фамилия
1 Джон Доу
2 Мэри Доу

Таблица бронирования содержит

Идентификатор бронирования СтаффИД Статус
1 1 отмененный
2 1 отмененный
3 1 подтвержденный
4 2 отмененный
5 1 подтвержденный

Я хотел бы получить количество подтвержденных/отмененных бронирований для каждого персонала, но у меня возникли проблемы с его работой. Мой текущий запрос, который я использую, таков

 Select staff.StaffID, staff.First_name, staff.Last_name, sum(booking.Status LIKE '$status') as Status  from staff, booking  where staff.StaffID = booking.ConvenerID  group by staff.StaffID  

$status быть cancelled или confirmed . С помощью этого запроса я могу отобразить строку только в том случае, если есть значение статуса, если у персонала нет отменено, он не отображает строку для этого персонала. Как я могу заставить строку отображаться, даже если количество $status равно 0 .

Ответ №1:

Вам нужно LEFT объединить таблицы:

 SELECT s.StaffID, s.First_name, s.Last_name,   COALESCE(SUM(b.Status = ?), 0) AS counter  FROM staff s LEFT JOIN booking b ON s.StaffID = b.StaffID  GROUP BY s.StaffID;  

? Замените значением статуса, которое вы хотите (нет причин использовать оператор LIKE , потому что простой = работает нормально).

Комментарии:

1. Спасибо за ваш ответ, это отличная работа!