对于预订系统,
预订记录是这样存储的:
start_time (timeStamp)
duration (int)
它以小时为单位,因此持续时间意味着预订的小时数。因此,当我添加预订记录时,我想检查时间间隔是否已经存在(注意,与以前的预订时间重叠的部分也不允许)。
我想写一个SQL来选择重叠的数据,所以如果计数行是0,那么这意味着它不重叠,并允许插入到表
尝试了类似的东西
$start = $_POST['start'];
$duration = $_POST['duration'];
SELECT COUNT(1) FROM booking WHERE $start >= start_time AND end_time_from_post <= end_time_from_exist_record
因此,唯一的问题似乎是获得结束时间,谢谢你的帮助。
首先,您不需要进行聚合。您只需检查任何行的返回结果集(在这种情况下,这没有什么区别,因为可能有0或1行,但在其他类似情况下,聚合是不必要的开销)。
如果一个周期在第二个周期结束前开始,而第一个周期在第一个周期开始后结束,则两个周期重叠:
select 1
from booking
where $start <= date_add(start_time, interval duration hour) and
date_add($start, interval $duration hours) >= start_time;
注意:根据你对"重叠"的定义,这些可能是严格的不等式。