我正在为我工作的学校建立一个资源预约系统。资源只保留40分钟(这是类持续的时间)。
资源分为4类:
1-学龄前儿童
2-初等
3-一楼高中
4-高中,二楼
时间表分为不同的时间跨度:
1-托儿所
2-预和尚
3-更仁慈
4-小学(一年级-三年级)
5-小学(4年级-6年级)
6-高中(7年级-9年级)
7-高中(10年级及以上)
有时,有一种情景,一年级到三年级学生休息,四年级到六年级学生在课堂上。休息15分钟,上课40分钟。有时,在日程安排上存在冲突,如果允许用户保留资源,该资源将被另一个用户使用至少10分钟,这种情况在preschool、elementary和high school上都会发生。
我的DB预订表结构如下:

我有两个字段,我认为这将帮助我确定预订是否会造成冲突:RESERVATIONDUEDATE和RESERVATIONEXPIREDATE,它们都是datetime,有我需要的信息。我很难想象如何进行查询来验证是否会发生冲突。
到目前为止,我有一个类似于以下查询的函数:
SELECT T1.SCHEDULE_START, T1.SCHEDULE_END
FROM reservation T4
JOIN schedule_intermediate T1 ON T4.SCHEDULEID_GENERATED = T1.SCHEDULEID_GENERATED
JOIN schedule_type T2 ON T1.SCHEDULE_TYPE_ID = T2.SCHEDULE_TYPE_ID
JOIN schedule T3 ON T1.SCHEDULEID = T3.SCHEDULEID
WHERE (
SELECT COUNT( * )
FROM reservation R
INNER JOIN schedule_intermediate SI ON R.SCHEDULEID_GENERATED = SI.SCHEDULEID_GENERATED
WHERE R.RESOURCEID =456
AND SI.SCHEDULE_TYPE_ID =4
AND R.RESERVATIONDUEDATE != '2014-08-06 07:35:00'
AND R.RESERVATIONEXPIREDATE != '2014-08-06 08:35:00'
AND(( SI.SCHEDULE_START < T1.SCHEDULE_START AND SI.SCHEDULE_END > T1.SCHEDULE_START )
OR ( SI.SCHEDULE_START < T1.SCHEDULE_END AND SI.SCHEDULE_END > T1.SCHEDULE_END ))
) = 0该查询只打算选择RESOURCEID、SCHEDULE_TYPE_ID、“SCHEDULE_START”和“SCHEDULE_END”与查询中提供的信息不相同的可用schdule时间段。
此时,我甚至不确定查询的结构是否正确,因为这个查询的结果是:

我真正想要的是那些属性与所提供的不一样的时间。
发布于 2014-08-02 23:52:43
我正试着把我的头放在你需要的东西上。试试这个..。做一个和你做的类似的搜索..。
WHERE R.RESOURCEID =456
AND SI.SCHEDULE_TYPE_ID =4
AND R.RESERVATIONDUEDATE >= '2014-08-06 07:35:00'
AND R.RESERVATIONEXPIREDATE <= '2014-08-06 08:35:00'如果查询返回0行,则不会发生冲突。
目前,您的查询返回该行,因为Schedule_Start是07:50,不等于07:35:00?
此外,这是否适用于经常性会话,如果是的话..。您是如何以时间戳格式在DB中管理这一点的?
https://stackoverflow.com/questions/25100314
复制相似问题