我在DB上保存了一个列表事件。如果可以保存事件,我想使用查询进行检测。
有一个包含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的prev事件(id = 18)。但我不知道如何进行查询。我有一个查询使用,但没有成功。
答案 0 :(得分:1)
以下查询会告诉您是否存在影响期间的任何现有预订:
SELECT *
FROM reservaciones
WHERE FechaEnd >= '2013-09-09 14:00:00' AND
FechaStart <= '2013-09-09 18:00:00';
注意:<=
和>=
可能真的是<
和>
,具体取决于终点是否具有包容性。
推理很简单。当一个在另一个结束之前开始并且在另一个开始之后结束时,两个周期重叠。
答案 1 :(得分:0)
您可以通过询问数据库是否在这两个日期之间发生任何事件来轻松完成此操作。像
这样的东西SELECT * FROM EVENTS WHERE EVENT_DATE BETWEEN STARTDATE AND ENDDATE
如果查询返回结果,则表示您无法接受新事件。
这是不明确的,因为您没有指定您拥有的数据库字段等。
答案 2 :(得分:0)
试试这个
SELECT * FROM reservaciones WHERE '2013-09-09 20:00:10' BETWEEN FechaStart AND FechaEnd OR '2013-09-09 21:00:00' BETWEEN FechaStart And FechaEnd
如果有一行,则表示无法从该时间保留
<强>解释强>
有两种情况可以确定提交的事件是否与另一个事件重叠。
第一种情况是,提交事件的启动日期时间与另一事件重叠。
^********************^ <-- another event
^*********************^ <-- current event
第二种情况是提交事件的结束日期时间与另一事件重叠
^********************^ <-- another event
^*********************^ <-- current event
从上图中可以看出,这两个事件相互重叠。不相互重叠的事件将如下所示
^********************^ <-- another event
^*********************^ <-- current event