겹치는 :MySQL을 찾는 시간이 나는 다음과 같은 속성을 데이터베이스에이 개 테이블이
Booking
=======
booking_id
booking_start
booking_end
resource_booked
===============
booking_id
resource_id
두 번째 표는 "예약"과 "자원"사이의 연관 기업 (즉, 경고가 많이 포함 할 수 있습니다 자원). 속성 booking_start 및 booking_end는 날짜 및 시간이 포함 된 타임 스탬프입니다.
비슷한 resource_id의 다른 예약과 날짜/시간이 겹치거나 충돌하는 경우 어떻게 각 resource_id (resource_booked)를 찾을 수 있는지 알 수 있습니까?
나는 그것이 제가이 문제를 해결 수있는 방법을 시각화하는 데 도움이 될 내가 가지고 있는지 확인하기 위해, 그림으로, 종이에 답을 낙서 한이 :
- 는 하나 개의 테이블에 두 테이블 (예약, Booked_resource를) 가입 4 가지 속성이 필요합니다.
- 대답은 여기 제안에 따라 : Find overlapping (date/time) rows within one table
내가 1 단계하지만 2 단계는 나를 당황 떠나했다!
정말 고맙겠습니다. 감사!
편집 : 나는 씨 렌쇼의 답변을 읽고 있었다 나는 이해하면 내 자신에 대한 하나의 볼 일을 시도하고 나는 개념을 가지고 :
SELECT
a.*
FROM
(SELECT
b.creation_date,
b.booking_id,
r_b.resource_id,
b.booking_start,
b.booking_end
FROM Booking b
INNER JOIN resource_booked r_b ON b.booking_id = r_b.booking_id) as a,
(SELECT
b.booking_id,
r_b.resource_id,
b.booking_start,
b.booking_end
FROM Booking b INNER JOIN resource_booked r_b ON b.booking_id = r_b.booking_id) as
WHERE
a.resource_id = b.resource_id
AND
a.booking_id <> b.booking_id
AND
a.booking_start BETWEEN b.booking_start AND b.booking_end
AND
a.creation_date >= b.creation_date
내가이 개 동일한 테이블을 만들려고했다 생각 을 그들을 resource_id와 조인하고 비슷한 resource id를 가지고 있지만 다른 booking_id를 가진 레코드를 찾아서 하나의 booking_start datetime이 다른 하나의 예약 _ 시작과 booking_end 사이에 있는지 확인하십시오 (booking_id).
정말 지저분하고 내 쿼리가 내 마음에 무엇이 있는지 묻고 있지만 기적으로 볼 때 미스터 렌쇼와 같은 대답이 있습니다.
몇 가지 이유로 특정 레코드의 'duplicates'가 나타납니다. * b2.booking_id | b2.creation_date | rb1.resource_id | b1.creation_date | b1.booking_id * ** 23 | 2006-08-31 13 : 21 : 25.0 | 12 | 2006-09-05 14 : 12 : 17.0 | 21 ** 그리고 아래 다른 줄 : ** 21 | 2006-09-05 14 : 12 : 17.0 | 12 | 2006-08-31 13 : 21 : 25.0 | 23 ** – Cuppy
b1.creation_date> = b2.creation_date인지 확인하는 또 다른 WHERE 절을 추가하여 나중의 예약 만 표시하고 작동하는 것처럼 보입니다! 다시 한 번 감사드립니다! – Cuppy