2012-03-19 142 views
1

我正在研究一個預留會議室的應用程序,需要我的查詢幫助。當用戶選擇日期和開始和結束時間時,我會執行一次ajax調用來查詢數據庫,以查看該日期在該時間範圍內是否有任何會議室可用。這顯然意味着所有的各種可能性(開始要求先開始時間和結束請求時間後結束,所請求的開始時間後,開始和結束前要求結束時間等)如何選擇在開始和結束時間之間的記錄?

我試圖做這樣的事情:

SELECT room_id From table where ( 
(start_time >= request_start and end_time <= request_end) 
or 
(start_time <= request_start and end_time >= request_end) 
or 
(start_time >= request_start and end_time <= request_end) 
or 
(start_time <= request_start and end_time >= request_end) 
) 

但是,上述似乎並不奏效。很顯然,我不需要/希望房間超出請求的時間(在請求的開始和結束之前的開始和結束或者在請求的開始和結束之後開始和結束)。但我確實需要那些在請求開始之前開始的請求,但是在請求結束之前結束,並且在請求開始之後開始並在請求結束之後結束之後開始。

這個邏輯似乎正在逃避我。任何幫助將不勝感激!

此外,在一個側面說明,我想回到那個被保留,因爲上面是一個子查詢我曾經選擇不返回列表中的結果room_ids的room_ids。

回答

5

一個解釋參見this blog post,使用條件僅僅是:

where request_end >= start_time 
and request_start <= end_time 
+1

'一> = B和B <=a ==>一個= B'。你可能會補充'where request_end> = start_time和request_start <= end_time' – 2012-03-19 16:37:02

+0

我確實,謝謝! – 2012-03-19 16:44:53

+0

託尼,感謝您的答案和鏈接到博客。儘管解釋有意義,但它似乎並不適用於我。使用上述我沒有得到我所期望的。以下是一個示例情況:A房間11:15-12:45和B房間10:30-11:30。請求時間11:00-11:30。使用上述我得到的房間B返回,即使房間A也應退還。我一定錯過了一些東西,但我沒有看到它。 – wblakenc 2012-03-19 17:31:05

相關問題