2012-03-14 37 views
2

爲工作中的投影機制作簡單的預約系統。基於計算時間槽的SQL過濾

這是場景。每臺投影機可在一整天內將其可用性設置爲四分之一小時。即投影機1在每天的上午8:15至下午1:45至下午3:00至5:15之間可用(也可以改變爲每天設置不同的可用性)。只要投影機可用,您可以在一天中的任何時間段預訂投影機。所以我的設置在我的sql數據庫中(使用我的asp.net mvc前端)。

我的問題是什麼是在這種情況下搜索的最佳方式。即用戶A進來說,找到我在這個星期五下午12點至3點之間可用的投影儀。我努力編寫一個高效的SQL查詢,將過濾這個。到目前爲止,我的最佳選擇是退回所有投影機,並以編程方式解決它們是否可用,並且此時間之間沒有預訂。它有效,但效率非常低。我偶然發現了一個使用由存儲過程生成的臨時表的想法,該過程可以被過濾,但並不存在。

有沒有人有任何想法我可以怎麼辦?

在此先感謝

+0

你至少需要顯示數據庫模式。最好是您在查詢時的嘗試。 – 2012-03-14 04:33:55

+0

你能否提供你的表結構? – 2012-03-14 04:34:32

回答

1

我可能會含有開始時間和結束時間的表叫ProjectorReservations(在其他領域,你是誰租投影機可能會在意即)。

搜索投影機將是這個樣子:

SELECT projectorName 
FROM Projectors 
WHERE NOT EXISTS 
    (SELECT 1 FROM ProjectorReservations 
    WHERE Projectors.projectorName = ProjectorReservations.projectorName 
    AND (ProjectorReservations.startTime < {end_time} 
    OR ProjectorReservations.endTime > {start_time})) 

這幾乎檢查,以確保沒有保留你正在尋找的目的,反之亦然一個之前啓動。很明顯,你需要相應地調換你的字段,但是這應該給你的總體思路