2012-03-19 9 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'。あなたはおそらく 'どこにrequest_end> = start_timeとrequest_start <= end_time'と答える –

+0

本当にありがとう! –

+0

トニー、答えとブログへのリンクありがとう。説明は意味をなさないが、それは私にとってはうまくいかないようだ。上記を使用して私は私が期待するものを得ることはありません。サンプルA:11:15-12:45とB:10:3​​0〜11:30リクエスト時間11:00〜11:30上記を使用して、ルームAも返されるにもかかわらず、ルームBが返されます。私は何かを欠いているに違いないが、私はそれを見ていない。 – wblakenc

関連する問題