2011-08-05 9 views
0

2つのDATETIME列の間にエントリが存在するかどうかを確認するのに問題があります。 マッサージの予約システムを作成すると、私は08:00、08:15 08:30、08:45のようにリストされます。 例えば、13:00:00から2時間前のようなスロットがあるかどうか確認したいと思います。 (この治療は120分で、90分の持続時間を有する他の治療法がある)。日付と時刻の間のMySQLのチェック2列

の表は、それが仕事をdosent

$times_from_date = '2011-08-15 13:00:00'; 
$times_to_date = '2011-08-15 16:00:00'; 

SELECT * FROM `wp_byforssell_booking` WHERE '". $times_from_date ."' BETWEEN from_date AND to_date OR '". $times_from_date ."' BETWEEN from_date AND to_date OR '". $from_to_date 

この

|id|event|from_date|to_date| 

1 | massage | 2011-08-15 14:00:00 | 2011-08-15 16:00:00 

クエリのようなものです。何か案は?

EDIT

は、私は上記のように、私のデータベースで予定を得たとしましょう。

2011-08-15 13:45と2011-08-15 15:30の間にすべての予定を照会したいと思います。

これは私の問題です。それが問題のより良い説明であることを願っています。

EDIT

私のテーブルは今

id|event|from_date|to_date| 

1 | massage(60min) | 2011-08-15 13:30:00 | 2011-08-15 15:30:00 

2 | massage(60min) | 2011-08-15 09:00:00 | 2011-08-15 10:00:00 

そして、私のクエリ次のようになります。 時間選択フラン九時30分および11時30分、そしてそれは、行の#2を生成しない用量。

SELECT * FROM wp_byforssell_booking WHERE((('2011-08-15 09:30:00' <= from_date)AND('2011-08-15 11:30:00' > from_date)) OR (('2011-08-15 09:30:00' >= from_date)AND('2011-08-15 11:30:00' < to_date))) 
+0

あなたの例では、あなたは** 3時間**であり、** 2 ** - '13:00'から '16:00'までは3時間です。 – ain

答えて

0

あなたはタイプミスがあります。 $times_to_dateと宣言しましたが、クエリには$from_to_dateが使用されています。

...BETWEEN from_date AND to_date OR '". $times_from_date ."' BETWEEN from_date AND to_date OR '". $from_to_date 
    ---------------------------------------------------------------------------------------------^^^^^^^^^^^^^^ 

は次のようになります。

...BETWEEN from_date AND to_date OR '". $times_from_date ."' BETWEEN from_date AND to_date OR '". $times_to_date 
0

マイケルが指摘するもののほか、二回WHERE句あなたも同じことをやっている:

... WHERE '". $times_from_date ."' BETWEEN from_date AND to_date OR '". $times_from_date ."' BETWEEN from_date AND to_date ... 

が想定さそれらの一つではありませんチェックするには$times_to_date

+0

ええ、私はそれを見ましたが、それはちょうどタイプミスでした:) –

0

私が正しく理解していれば、あなたがそこに(この場合は$のtimes_from_dateと$ times_to_dateで)開始時間と終了時間の間に十分な時間差がありますし、これはそれを行うだろうすべてのバケットを一覧表示したい、私は思う:

SELECT * FROM wp_byforssell_booking 
WHERE exists 
     (select 1 from wp_byforssell_booking where 
     timestampdiff(HOURS,from_date,to_date)>= 
     timestapdiff(HOURS,$times_from_date,$times_to_date) 
+0

あなたの返事をありがとう、私は最初からやり直す必要があると思います。投稿のEDITを確認する –

0

$times_from_dateで与えられた日時範囲と重複しないレコードを取得し、$times_to_dateあなたは

SELECT * FROM wp_byforssell_booking WHERE 
(
(($times_from_date <= from_date)AND($times_to_date > from_date)) 
OR 
(($times_from_date >= from_date)AND($times_from_date < to_date)) 
) 

のようなクエリを使用するには、<代わりの<=およびを使用する必要がありますあなたのロジックに依存します。すなわち、1つが2011-08-15 14:00:00で終了し、他が2011-08-15 14:00:00で開始すると、2つのイベントが重複します(IOWは、重複しないように開始するためには、2011-08-15 14:00:01です)。

関連する問題