#php #mysql
#php #mysql
Вопрос:
С небольшой (большой) помощью от StackOverflow в прошлом году у меня появилась функция, которая покажет, сколько сотрудников в настоящее время работают.
Код работает нормально, но теперь мы внедрили ночные смены, и исходный запрос показывает только смены, которые начинаются с текущей даты. Люди, работающие в ночные смены, могут зарегистрироваться в 10 вечера и уйти в 8 утра — в текущем запросе они не отображаются, потому что startdate — это день раньше…
Я пытался реализовать enddate в запросе, но безуспешно.
teamslots
---------
id
startdate
starttime
enddate
endtime
teamslot_schedule
-----------------
id
slotid (joins to is in teamslots)
userid
shifthours
----------
thehour
Это исходный запрос — мне действительно могла бы пригодиться помощь, которая включила бы в запрос сотрудников, которые находятся на смене, которая начинается накануне, но заканчивается «сегодня».
SELECT
DATE_FORMAT(d.startdate INTERVAL s.thehour HOUR, '%Y-%m-%d %H') AS date,
COUNT(DISTINCT ts.userid) AS users
FROM
shifthours s
JOIN
(SELECT DISTINCT startdate FROM teamslots) d
LEFT JOIN
teamslots t ON t.startdate = d.startdate AND
s.thehour BETWEEN HOUR(t.starttime) AND HOUR(t.endtime)
LEFT JOIN
teamslot_schedule ts ON ts.slotid = t.id
GROUP BY
d.startdate,
s.thehour
ORDER BY
d.startdate INTERVAL s.thehour HOUR;
С наилучшими пожеланиями,
Отметить
Комментарии:
1. Настройте SQL-скрипку и поделитесь с нами тем, что вы уже пробовали.
2. Как вы решаете, на какой день приходится смена? Основано ли это на
enddate
?3. Маркус : Смена имеет начальную дату время начала И конечную дату время окончания — вместе они указывают промежуток времени, который занимает смена. например. datestart «2014-07-01» время начала «22:00» дата окончания «2014-07-02» время окончания «06:00» — это 8-часовая смена, которая охватывает 2 даты. Этот сдвиг должен учитываться в запросе как для «2014-07-01», так и для «2014-07-02», но только в правильные часовые интервалы. «2014-07-01 22:00 1» «2014-07-01 23:00 1» «2014-07-02 00:00 1» «2014-07-02 01:00 1» «2014-07-02 02:00 1» «2014-07-02 03:00 1» «2014-07-02 04:00 1» «2014-07-02 05:00 1»
4. Таблица «shifthours» содержит только 24 строки от 0 до 23, используемые для объединения за каждый час, необходимый для получения результата.
Ответ №1:
Используйте функцию MySQL CURDATE() и вычтите соответствующий интервал для продолжительности вашей смены.