对于预订系统,
预订记录是这样的商店:
start_time (timeStamp)
duration (int)
基于小时,因此持续时间表示预订的小时数。因此,当我添加预订记录时,我想检查时间间隔是否已经存在(请注意,预留时间的重叠部分也不允许)。
我想写一个SQL来选择重叠的数据,所以如果count行为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)
首先,您不需要进行聚合。您可以检查任何行的返回结果集(在这种情况下,它没什么区别,因为可能有0或1行,但在其他类似的情况下,聚合是不必要的开销)。
如果一个在第二个结束之前开始而第一个结束在第二个结束之后结束,则两个周期重叠:
select 1
from booking
where $start <= date_add(start_time, interval duration hour) and
date_add($start, interval $duration hours) >= start_time;
注意:根据您对&#34;重叠&#34;的定义,这些可能是严格的不平等。