2010-06-04 47 views
1

对于事件系统,我需要检查是否有足够的资源可用于事件。事件有一个开始和结束时间戳,并且需要大量资源(为了简单起见,我们假设只有一种资源类型)。当新事件被预订时,应该检查是否可能。所有事件都是基于教义的php对象,时间戳不需要比分钟更具体。mysql/php中事件的基于时间的资源可用性

我遇到烦恼像下面的例子:在12:00需要13:00

  • 1资源是从13:00需要14:00

    • 1资源创建
    • 一个新的事件想从12:00至14:00

    1级的资源让我们假设我们有一个总的2个资源,那么这应该是可能的。我目前选择所有与新事件重叠的事件(所以从12:00到14:00),并且获取这些事件所需的所有资源的总和。这意味着新的事件是不可能的。

    我该如何检查(高效)是否可能发生新事件?要么只使用原则查询,要么使用原则查询进行基本选择,然后使用php进行过滤。我到目前为止唯一的解决方案是:从12:00到14:00选择所有事件,并在每分钟(如此迭代120次)检查资源是否超额预订。

  • 回答

    0

    由于您使用时间戳,所以这可能相当容易。

    你会拉今天的所有事件。然后遍历每个人,看看新的事件的时间戳边界与现有事件的时间戳边界

    $conflict = false; 
    foreach($arrEvents as $event) { 
        if ($newStart >= $existingStart && $newStart < $existingEnd) { 
         // The start time falls within this event's time 
         $conflict = true; 
        } elseif ($newEnd > $existingStart && $newEnd <= $existingEnd) { 
         // The end time falls within this event's time 
         $conflict = true; 
        } elseif ($newStart <= $existingStart && $newEnd >= $existingEnd) { 
         // Existing event falls completely within the new event 
         $conflict = true; 
        } 
    } 
    

    冲突显然遍历所有事件是不是最有效的方式,但是这是我有一个基本的解决方案过去使用效率不是问题

    +0

    这就是我现在正在做的。不幸的是,这不包括我描述的情况。如果可以同时举办2场比赛,而我们目前有2场比赛(12:00-13:00和13:00-14:00),那么应该可以在12:00至14点之间添加一场新赛事:00没有冲突。 – Intru 2010-06-05 12:33:51