PHP/MySQL SELECT
我有一张桌子,上面有会议室特定日期的可用时间。Temp_Res获取预订正在进行时的时间戳(以锁定这些行(。如果要预订的会议是 2 小时,我想得到每个可能的时间段。
天 小时Temp_Res
22 8 0000-00-00 00:00:00
22 9 0000-00-00 00:00:00
22 10 0000-00-00 00:00:00
22 11 2012年5月18日22 :02:00
22 12 2012年5月18日22 :02:00
22 13 2012年5月18日22 :02:00
22 14 0000-00-00 00:00:00
22 15 0000-00-00 00:00:00
22 16 0000-00-00 00:00:00
22 17 0000-00-00 00:00:00
因此,如果所需的时隙为 2 小时,则只有小时 8、9、14、15、16 将是输出。(然后我会使用小时并添加 2 来获得插槽:8-10、9-11、14-16、15-17 和 16-18(
如果时隙是 3 小时,则只有小时 8、14、15 是输出和时隙:8-11、14-17、15-18....等
为了能够在 SELECT 中执行此操作(如果可能(,必须有一种查看表中其他行的方法,以确定是否应包含特定行。
1. 是否可以查看其他行并使用带有 WHERE(或类似(的选择来执行此操作?
2. 如果可能的话,你能引导我走向正确的方向吗?
3.其他解决方案/想法(以下解决方案/想法除外(也非常感谢!
否则我必须通过以下方式解决它:
a( 创建额外的时隙表
b( 有一个额外的列,说明该特定行的最大时间段,见下文。
日 时 隙 Temp_Res
22 8 3 0000-00-00 00:00:00
22 9 2 0000-00-00 00:00:00
22 10 1 0000-00-00 00:00:00
22 11 0 2012年5月18日22 :02:00
22 12 0 2012年5月18日22 :02:00
22 13 0 2012年5月18日22 :02:00
22 14 4 0000-00-00 00:00:00
22 15 3 0000-00-00 00:00:00
22 16 2 0000-00-00 00:00:00
22 17 1 0000-00-00 00:00:00
选择"天"、"小时"表
其中插槽>=2 和Temp_Res<"2012-05-18 22:00:00">
按天、小时
分组
我建议使用开始时间和会议长度来计算结束时间,这相当于"需要空闲的最后一小时才能进行此预订"。然后,您可以使用内部联接仅选择开始时间,其中直到结束时间的每个小时也被取消预订。对于四小时的会议,您的查询可能如下所示:
SELECT start.day, start.hour from table as start
INNER JOIN table as hour1
ON ((hour1.hour = start.hour + 1) AND (hour1.TempRes = '0000-00-00 00:00:00'))
INNER JOIN table as hour2
ON ((hour2.hour = start.hour + 2) AND (hour2.TempRes = '0000-00-00 00:00:00'))
INNER JOIN table as hour3
ON ((hour2.hour = start.hour + 3) AND (hour3.TempRes = '0000-00-00 00:00:00'))
WHERE table.TempRes = '0000-00-00 00:00:00'
您可以在 PHP 中使用循环将所需数量的内部连接子句添加到查询文本中(并且由于您使用的是自己计算的变量,因此不必担心注入(。它将永远是(会议持续时间 - 1(。
如果有人试图安排一个午夜的会议,这将不返回开放时间,但如果这是不希望的,你可以很容易地编写逻辑来适当地增加日期变量。