0

我有一个返回时隙的 mysql 查询。我有一个名为timeslots 的表,其中包含starttimeb、endtimeb 和employeeb。Booked Starttime 和 endtime 字段从名为 schedule 的不同表中提取。问题是我只能分配由时隙表定义的约会。

例如,我希望 8:00 到 10:00、10:00 到 12:00、12:00 到 14:00、14:00 到 16:00 和 16:00 到 18:00 的时段不可用,如果有计划表中有 1 个计划项目,开始时间为 08:00,结束时间为 18:00。营业时间定义为 8:00 到 18:00,因此在此期间只有两个小时的时间段可用,并且预约的时间可能会超过时间段表中提供的 2 小时时间段,例如,如果8:00 至 12:00 已预订 我只希望 12:00 至 14:00、14:00 至 16:00 和 16:00 至 18:00 可用。或者,如果预订了 9:00 至 11:00,则只有 12:00 至 14:00、14:00 至 16:00 和 16:00 至 18:00 可用。

mysql_query( "SELECT *
FROM timeslots
LEFT OUTER JOIN
 (SELECT 
   starttime
 , endtime
 , custno
 , id
FROM schedule
WHERE schedule.date = '2012-12-14'
 ) AS a
 ON a.starttime >= timeslots.starttimeb
 AND a.endtime <= timeslots.endtimeb
 AND a.custno = timeslots.custnob" );

上面的查询返回类似这样的内容...在我的应用程序中,如果 starttime 为空,则设置为可用时隙。

starttimeb endtimeb custnob starttime endtime custno id
08:00:00 10:00:00 迈克尔 W 斯隆 08:00:00 10:00:00 迈克尔 W 斯隆 15670
10:00:00 12:00:00 迈克尔 W 斯隆 NULL NULL NULL NULL
12:00:00 14:00:00 迈克尔 W 斯隆 NULL NULL NULL NULL
14:00:00 16:00:00 迈克尔 W 斯隆 14:00:00 16:00:00 迈克尔 W 斯隆 15673
16:00:00 18:00:00 迈克尔 W 斯隆 NULL NULL NULL NULL
08:00:00 10:00:00 James T Reesor 08:00:00 10:00:00 James T Reesor 15664
10:00:00 12:00:00 James T Reesor NULL NULL NULL NULL
12:00:00 14:00:00 James T Reesor NULL NULL NULL NULL
14:00:00 16:00:00 James T Reesor NULL NULL NULL NULL
16:00:00 18:00:00 James T Reesor 16:00:00 18:00:00 James T Reesor 15674
08:00:00 10:00:00 Carlton L. Pierce NULL NULL NULL NULL
10:00:00 12:00:00 Carlton L. Pierce NULL NULL NULL NULL
12:00:00 14:00:00 Carlton L. Pierce 12:00:00 14:00:00 Carlton L. Pierce 15671
14:00:00 16:00:00 Carlton L. Pierce NULL NULL NULL NULL
16:00:00 18:00:00 Carlton L. Pierce NULL NULL NULL NULL
08:00:00 10:00:00 Frankie D Aldridge NULL NULL NULL NULL
10:00:00 12:00:00 Frankie D Aldridge NULL NULL NULL NULL
12:00:00 14:00:00 Frankie D Aldridge NULL NULL NULL NULL
14:00:00 16:00:00 Frankie D Aldridge NULL NULL NULL NULL
16:00:00 18:00:00 Frankie D Aldridge NULL NULL NULL NULL
08:00:00 12:00:00 迈克尔 W 斯隆 08:00:00 10:00:00 迈克尔 W 斯隆 15670
4

1 回答 1

1

很难理解问题是什么,但是如果问题是您想查找 schedule 中的任何行是否与时隙表中的时间重叠,则更改

ON a.starttime >= timeslots.starttimeb
AND a.endtime <= timeslots.endtimeb

它只匹配在给定时间段内开始和结束的计划行,进入

ON a.starttime < timeslots.endtimeb
AND a.endtime > timeslot.starttimeb

它匹配既不完全在所讨论的时间段之前也不完全在所讨论的时间段之后的计划行,可能会有所帮助。

于 2013-01-11T22:38:03.870 回答