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

时间:2013-12-11 16:28:23

标签: php mysql overlapping

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

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

如果事件没有与数据库中的另一个重叠,我需要能够在保存之前添加事件和检查。例如,我在我的数据库中收到了这些事件:

+------------+------------+------------+----------+----------+
| 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中添加12:00:00150的事件,它应该会给我一个错误,因为已经有10:3011:30的事件range()与另一事件同时发生。但是,如果我添加相同的事件,但对于本地200(例如),它应该工作,因为在本地同时没有其他事件......

我尝试使用PHP {{1}}并使用数组方法计算时间和日期,但它不起作用。我不知道怎么检查。

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

2 个答案:

答案 0 :(得分: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)
  )

如果您得到任何结果,那么您就知道存在匹配事件

答案 1 :(得分:0)

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