Как выполнить sql запрос?

464
17 мая 2017, 07:03
SELECT w.name_worker, w.surname_worker, w.midname_worker, w.id_worker, SUM(number) numb
FROM workers w 
    LEFT JOIN exhours e ON (w.id_worker = e.id_worker) 
    LEFT JOIN orders o ON (e.id_order = o.id_order)
WHERE o.datetime_order >= '$date_start' AND o.datetime_order <= '$date_end' 
GROUP BY w.id_worker

Использую такой запрос, чтобы посчитать количество отработанных часов сотрудником за период времени. Как можно добавить в выдачу всех сотрудников из таблицы workers, чтобы были и те, кто ничего не отработал за этот период? Посоветовали использовать left join, но у меня ничего не поменялось

Answer 1

Если есть WHERE, то его условие в запросе является обязательным, следовательно у пользователей которые ничего не отработали, вероятно записей в таблице orders нет, поэтому ваше условие отсекает таких.

Вам нужно вынести это условие в JOIN и тогда появятся сотрудники которые ничего не отработали в этом периоде.

SELECT w.name_worker,
       w.surname_worker,
       w.midname_worker,
       w.id_worker,
       SUM(number) numb
FROM workers w
LEFT JOIN exhours e ON (w.id_worker = e.id_worker)
LEFT JOIN orders o ON (e.id_order = o.id_order
                       AND o.datetime_order >= $date_start
                       AND o.datetime_order <= $date_end)
GROUP BY w.id_worker
READ ALSO
Android не подключается к СУБД MySQL через PHP

Android не подключается к СУБД MySQL через PHP

Выполняю работу по примеру, но почему то приложение не добавляет запись в БД, хотя если в php изменить переменные на текст, то запись при выполнении...

344
Массовая замена id на порядковые номера

Массовая замена id на порядковые номера

ЗдравствуйтеПоясню вопрос

416
SQLite join пустая таблица

SQLite join пустая таблица

Имеются таблицы:

388