1

作業スケジュールに「適合する」すべてのユーザーを選択する必要があります。

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まで働くすべてのユーザーを選択します。サンプルユーザー(ID 1)を含める必要があります。

何か案は?

4

3 に答える 3

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でそれを参照してください。

于 2013-03-08T10:14:32.660 に答える
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' ) 
于 2013-03-08T10:24:53.170 に答える
0

以下のコードを試してください。

Select * from Timetable
Where day_number>=1 and day_number <=3 And
hour(start) >= 12 and hour(end)<= 16
于 2013-03-08T10:21:49.807 に答える