0

我有一个保存在数据库中的事件列表。我想使用查询来检测事件是否可以保存。

有一个包含 3 个字段的表单:

  • 物品
  • 开始日期
  • 结束日期

当用户点击保存时。系统必须检查事件是否在时间范围内可用。

下面是一个例子:

http://sqlfiddle.com/#!2/88b27/1

例如,如果我想预订从“2013 年 9 月 9 日 15:00:00”开始到“2013 年 9 月 9 日 17:00:00”结束的活动(持续时间 2 小时)。无法执行此操作,因为存在开始时间为 2013 年 9 月 9 日 14:00:00 的上一个事件 (id=18)。但我不知道如何进行查询。我有一个使用 between 但没有成功的查询。

4

3 回答 3

1

以下查询会告诉您是否存在影响该期间的任何现有预留:

SELECT  *
FROM reservaciones
WHERE FechaEnd >= '2013-09-09 14:00:00' AND
      FechaStart <= '2013-09-09 18:00:00';

注意:<=and>=可能真的是<>取决于端点是否包含在内。

道理很简单。当一个时段在另一个结束之前开始并且也在另一个开始之后结束时,两个时段重叠。

于 2013-09-10T01:01:52.097 回答
0

您可以通过询问数据库在这两个日期之间是否有任何事件来轻松完成此操作。就像是

SELECT * FROM EVENTS WHERE EVENT_DATE BETWEEN STARTDATE AND ENDDATE

如果查询返回结果,就知道不能接受新事件。

这是模棱两可的,因为您没有指定您拥有的数据库字段等。

于 2013-09-10T00:44:44.550 回答
0

尝试这个

SELECT * FROM 预订
FechaStart 和 FechaEnd 之间的“2013-09-09 20:00:10”
或“2013-09-09 21:00:00”在 FechaStart 和 FechaEnd 之间

如果有一行,则表示从那时起无法预订

解释

有两种情况来确定提交的事件是否与另一个事件重叠。

  • 第一种情况是提交事件的开始日期时间与另一个事件重叠。

     ^********************^  <-- another event
                ^*********************^  <-- current event
    
  • 第二种情况是提交事件的结束日期时间与另一个事件重叠

                  ^********************^  <-- another event
        ^*********************^  <-- current event
    

从上图中可以看出,这两个事件相互重叠。彼此不重叠的事件将如下所示

  ^********************^  <-- another event
                          ^*********************^  <-- current event
于 2013-09-10T00:46:43.270 回答