时隙可用性多天mysql
我有一个关于MySQL中空闲时间段检索的问题。我有两个表时隙可用性多天mysql,mysql,calendar,Mysql,Calendar,我有一个关于MySQL中空闲时间段检索的问题。我有两个表 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调度器保存计划任务
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调度器保存计划任务
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))
)
我错过了什么
提前谢谢我想试试这样的东西:
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', ' ' ,EndTime) AND
EndDateTime >= concat('2012-12-20', ' ' ,StartTime))
)
这样,您要求的时间段与任何客房预订都不相交。这是可行的,但我不完全明白您的意思,请您再详细说明一下好吗?当然,如果我不够清楚,很抱歉。RoomStart和RoomEnd之间的房间预订为了清楚起见,我使用这些名称占用了一个时间段SlotStart SlotEnd当且仅当预订在插槽结束之前开始,在插槽开始之前结束,也就是说RoomStart=SlotStart。为了验证这是真的,你可以尝试想象所有不同的可能性。因此,在查询中,您可以选择不存在交叉预订的时段。希望这更清楚一点。
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', ' ' ,EndTime) AND
EndDateTime >= concat('2012-12-20', ' ' ,StartTime))
)