2013-12-11 31 views
-1

我目前正在为我的客户开发一个事件管理系统,但我被困在一个地方。PHP - 检查事件是否与另一个事件重叠

对于每个事件,我们需要指定事件发生的地方。这也应该被验证。

我需要能够添加一个事件,并在保存之前检查,如果事件不与数据库中的另一个重叠。例如,我在我的DB的事件:

+------------+------------+------------+----------+----------+ 
| EVENT NAME | DATE | BEGIN_TIME | END_TIME | LOCAL_ID | 
+------------+------------+------------+----------+----------+ 
| Test 1  | 12/11/2013 | 11:00:00 | 12:00:00 | 250  | 
| Test 2  | 12/11/2013 | 10:30:00 | 11:30:00 | 150  | 
+------------+------------+------------+----------+----------+ 

现在,如果我想从11:00:00事件在当地150添加到12:00:00,应该是因为已经有一个从10:3011:30事件给我一个错误这与其他事件同时发生。但是,如果我添加相同的事件,但本地200(例如),它应该工作,因为在本地没有其他事件在同一时间...

我试图计算使用PHP的时间和日期range()并使用数组方法,但它不起作用。我不知道如何检查。

注意:我使用的是Joomla! 3.1,如果需要,我可以编写自己的插件。

+0

我认为你的问题可能有点过于宽泛。你必须对你想要测试的内容做更具体的描述。你想用什么精确的规则来选择你的数据。如果在这个时间段内已经有事件发生,但您尚未提供任何您已尝试过的代码,那么您希望它会给您一个错误。也许代码片段可能会让它更清晰一些。 – Luke

+0

将日期和时间转换为时间戳,然后使用[确定是否两个日期范围重叠](http://stackoverflow.com/questions/325933/determine-whether-two-date-ranges-overlap)中概述的方法。 – user555

+0

你可以编写自定义SQL查询吗?如果是这样,考虑查看BETWEEN条件。 – isick

回答

2

您可以通过SQL进行检查 - 执行查询以检查任何事件,匹配local_id,该事件的计划日期为之间的事件计划为

例如

SELECT 
    1 
FROM 
    events 
WHERE 
    `local_id` = :local_id 
AND 
    `date` = :date 
AND 
    (
    (`begin_time` BETWEEN (:start) AND (:end) 
    OR 
    (`end_time` BETWEEN (:start) AND (:end) 
) 

如果你得到任何结果的话,你知道有一个匹配的事件

0

如果我正确理解你的问题,我相信你应该发出一个SQL查询来检查你的范围内是否存在使用SQL关键字BETWEEN的行。是的,您的BEGIN和END时间列需要是本机日期格式,而不是字符串。