2010-06-04 66 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