Выберите пользователей, которые вписываются в расписание MySQL
Мне нужно выбрать всех пользователей, которые "вписываются" в их рабочие графики.
Таблица в расписании MySQL :
user_id PRIMARY
day_number(0-sunday 6-saturday) PRIMARY (one user - one day)
start start worktime
end end worktime
Образец пользователя:
user_id = 1
day_number = 1
start = 10:00
end = 18:00
user_id = 1
day_number = 2
start = 12:00
end = 18:00
user_id = 1
day_number = 3
start = 14:00
end = 16:00
Теперь я хочу выбрать каждого пользователя, который работает с 1(понедельник) до 3(среда) с 14:00 до 16:00. Образец пользователя (с идентификатором 1) должен быть включен.
Есть идеи?
3 ответа
Решение
SELECT user_id
FROM my_table
NATURAL JOIN (SELECT 1 day_number UNION ALL SELECT 2 UNION ALL SELECT 3) days
JOIN (SELECT MAKETIME(14,0,0) start, MAKETIME(16,0,0) end) times
ON my_table.start <= times.start
AND my_table.end >= times.end
GROUP BY user_id
HAVING COUNT(DISTINCT my_table.day_number) = 3 -- number of days in range
Смотрите это на http://sqlfiddle.com/.
Попробуйте этот запрос
SELECT *
FROM `Timetable`
WHERE day_number between
1 and 3
AND TIME_TO_SEC( start ) <= TIME_TO_SEC( '14:00' )
AND TIME_TO_SEC( end ) >= TIME_TO_SEC( '16:00' )
Или же
SELECT *
FROM `Timetable`
WHERE day_number in (1,2,3 )
AND TIME_TO_SEC( start ) <= TIME_TO_SEC( '14:00' )
AND TIME_TO_SEC( end ) >= TIME_TO_SEC( '16:00' )
Попробуйте код ниже:
Select * from Timetable
Where day_number>=1 and day_number <=3 And
hour(start) >= 12 and hour(end)<= 16