PHP-检查事件是否与另一个事件重叠


PHP - Check if event is overlapping another one

我目前正在为我的客户开发一个事件管理系统,但我被困在了一个地方。

对于每个事件,我们需要指定事件发生的本地位置。这也应该得到验证。

我需要能够添加一个事件,并在保存之前检查该事件是否与数据库中的另一个事件重叠。例如,我在数据库中得到了这些事件:

+------------+------------+------------+----------+----------+
| 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      |
+------------+------------+------------+----------+----------+

现在,如果我想在本地150中添加从11:00:0012:00:00的事件,它应该会给我一个错误,因为已经有一个从10:3011:30的事件与另一个事件处于同一时间。但是,如果我添加相同的事件,但对于本地200(例如),它应该有效,因为在本地中没有其他事件同时发生。。。

我尝试使用PHP range()和数组方法计算时间和日期,但没有成功。我不知道该怎么查。

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

您可以通过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)
  )

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

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