我有一个关于 MySQL 中空闲时隙检索的问题。我有 2 个表。
Table 1:
TimeSlots (Defines the available timeslots in 15 minutes)
Columns : StartTime (**Time**), EndTime(**Time**)
Data:
00:00:00 , 00:15:00
00:15:00 , 00:30:00
And so on until 23:45:00 , 00:00:00
表 2 Scheduler(持有计划任务)
Columns : idScheduler (**pk**) , Room (**int, fk**), StartDateTime (**DateTime**), EndDateTime (**DateTime**)
我用来检索一天的开放时间段的查询是:
SELECT StartTime, EndTime FROM TimeSlots WHERE
NOT Exists (
SELECT Room, StartDateTime, EndDateTime FROM Scheduler
WHERE Room = 'Room1'
AND DATE(StartDateTime) = '2012-12-20'
AND
(StartDateTime >= concat('2012-12-20', ' ' ,StartTime) AND
StartDateTime <= concat('2012-12-20', ' ' ,EndTime))
OR
(EndDateTime >= concat('2012-12-20', ' ' ,StartTime) AND
EndDateTime <= concat('2012-12-20', ' ' ,EndTime))
OR
(EndDateTime <= concat('2012-12-20', ' ' ,StartTime) AND
StartDateTime >= concat('2012-12-20', ' ' ,EndTime))
)
Room 和 StartDateTime 将成为最终解决方案中的参数。
我遇到的问题是,例如,如果预订了跨越多个时间段的房间(例如:1、1、2012-12-20 13:10:00、2012-12-20 13:55:00)
如果我运行上面提到的查询,它将给出以下输出:
13:00:00 - 13:15:00
13:15:00 - 13:30:00
13:30:00 - 13:45:00
13:45:00 - 14:00:00
我在这里想念什么?
提前致谢