2012-03-19 126 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

相关问题