【问题标题】:How to check the time is overlap with the exist record in MYSQL?如何检查时间是否与MYSQL中存在的记录重叠?
【发布时间】:2016-01-04 02:25:57
【问题描述】:

对于预订系统,

预订记录是这样存储的:

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 

所以唯一的问题似乎是获得结束时间,感谢您的帮助。

【问题讨论】:

  • 结束时间 - 你的意思是 $_POST['start'] + $_post['duration']

标签: php mysql datetime time


【解决方案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;

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

【讨论】:

  • 重叠是指发布记录是否在现有记录的时间间隔内(完全相同或部分)
  • @user3538235 。 . .目前尚不清楚这是否包括终点。这就是我评论的重点。
  • 假设 2016 年 1 月 4 日(下午 3 点 - 下午 5 点)有一个新记录,所以对于 2016 年 1 月 4 日,下午 3 点结束/下午 5 点开始的预订不重叠,但如果现有预订是下午 2 点至下午 4 点,然后是重叠的
  • 有什么特殊情况吗?请随时指出,感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-03
  • 1970-01-01
  • 2011-02-17
  • 2012-12-21
  • 1970-01-01
  • 1970-01-01
  • 2012-11-27
相关资源
最近更新 更多