2013-03-08 3 views
1

근무 시간표에 "맞는"모든 사용자를 선택해야합니다. 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 

가 지금은 3 일에서 을 작동하는 모든 사용자 (월)을 선택합니다 (수요일) 14 00 ~ 16 : 00. 샘플 사용자 (ID 1 포함)가 포함되어야합니다.

어떤 아이디어?

+0

시작에 대한 열 유형 및 최종 열이 – DevelopmentIsMyPassion

+0

시작 무엇이며 끝 시간입니다 유형 – petkopalko

답변

1
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 

sqlfiddle에서 확인하십시오.

0

아래 코드를 사용해보십시오 :이 쿼리

Select * from Timetable 
Where day_number>=1 and day_number <=3 And 
hour(start) >= 12 and hour(end)<= 16 
+0

니스,하지만 요즘에는 범위 5를 원한다면 작동하지 않습니다. , 6,0,1 – petkopalko

1

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') 
+0

고마워, 정확히 내가 원하는 것 – petkopalko

+0

사용자가 DB에 2 일 (1,2) 밖에 없으면 작동하지 않을 것이다. 스크립트 shoudnt 그를 선택하지만이 경우 않습니다. 문제는 'day_number in (1,2,3)'에 있습니다. – petkopalko