如何检查时间与MYSQL中存在的记录是否重叠


How to check the time is overlap with the exist record in MYSQL?

对于预订系统,

预订记录是这样存储的:

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;

注意:根据你对"重叠"的定义,这些可能是严格的不等式。