다음 열이있는 데이터베이스 테이블이 있습니다. 날짜의 사용자 입력, 시작 시간과 종료 시간에 데이터베이스 테이블에서 시간 슬롯을 사용할 수 있는지 확인합니다.
+----+---------------------+---------------------+------------------+
| 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 쿼리가 될까요?
이 실제로이 how would I detect a non-overlap of two time periods?
UPDATE이 @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 |
+----+---------------------+---------------------+------------------+
중간 레코드가 조건과 일치하지 않고 계속 가져옵니다.
이 http://mattgemmell.com/2008/12/08/what-have-you-tried/ – Ankur