#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. Спасибо за ваш ответ, это отличная работа!