我正在我所在的学校建立资源预订系统。资源仅保留40分钟(这是课程的持续时间)。
资源分为4类:
1-幼儿园
2-小学
三楼一楼
4-高中二楼
时间表分为不同的时间跨度:
1-托儿所
2- pre-kinder
3 kinder
<4-> 4-小学(1年级 - 3年级) <5->小学(4年级 - 6年级)6-高中(7年级 - 9年级)
7-高中(10年级及以上)
有时候,一年级到三年级的学生都在休息,四年级到六年级的学生都在上课。休息持续15分钟,课程40分钟。有时,如果允许用户保留资源,那么该计划会在另外一个用户使用该资源至少另外10分钟的时间表上存在冲突,preschool
,elementary
和high school
。
我的数据库预订表结构如下:
我认为有两个字段可以帮助我确定预订是否会产生冲突: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
,&#39; SCHEDULE_START&#39;和&#39; SCHEDULE_END&#39;与查询中提供的信息不同。
此时,我甚至不确定查询是否结构正确,因为此查询的结果是:
我真正想要的是这些属性与提供的属性不同的时间段。
答案 0 :(得分:0)
我正试图了解你所需要的东西。试试这个...做一个类似于你做的搜索...
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?
此外,这是针对定期会话,如果是这样的话......您如何以时间戳格式在数据库中管理这个?