列を持つ次のデータベーステーブルがあります。
+----+---------------------+---------------------+------------------+
| id | start_datetime | end_datetime | arena_surface_id |
+----+---------------------+---------------------+------------------+
| 1 | 2012-11-22 02:30:00 | 2012-11-22 05:00:00 | 2 |
| 2 | 2012-11-22 00:00:00 | 2012-11-22 02:30:00 | 2 |
| 3 | 2012-11-22 05:00:00 | 2012-11-22 08:00:00 | 2 |
| 4 | 2012-11-22 08:00:00 | 2012-11-22 11:00:00 | 2 |
| 5 | 2012-11-22 11:00:00 | 2012-11-22 17:00:00 | 2 |
+----+---------------------+---------------------+------------------+
日付、開始時刻、終了時刻のユーザー入力を使用して、指定された期間内に特定の arena_surface_id に予約されたスロットがあるかどうかを確認したいと考えています。
たとえば、ユーザー入力がある場合。
start_datetime : 2012-11-22 6:00
end_datetime : 2012-11-22 9:00
arena_surface_id : 2
指定された日時の 6:00 から 9:00 までの時間帯に一致する行があるかどうかを知りたい (上記の例では、一致する必要があります)。
これに対する適切なmysqlクエリは何でしょうか?
これは実際にはこれに対するフォローアップの質問ですが、2 つの期間が重複していないことをどのように検出しますか?
アップデート
@Marchこれは、クエリを使用したときに返されるものです。
SELECT
id,
start_datetime,
end_datetime,
arena_surface_id
FROM
gce_arena_surface_booking
WHERE
(start_datetime BETWEEN '2012-11-22 04:00:00' AND '2012-11-22 09:00:00')
OR
(end_datetime BETWEEN '2012-11-22 4:00:00' AND '2012-11-22 9:00:00')
+----+---------------------+---------------------+------------------+
| id | start_datetime | end_datetime | arena_surface_id |
+----+---------------------+---------------------+------------------+
| 1 | 2012-11-22 02:30:00 | 2012-11-22 05:00:00 | 2 |
| 3 | 2012-11-22 05:00:00 | 2012-11-22 08:00:00 | 2 |
| 4 | 2012-11-22 08:00:00 | 2012-11-22 11:00:00 | 2 |
+----+---------------------+---------------------+------------------+
中央のレコードは条件に一致せず、それでもフェッチします。