2011-04-10 9 views
3

에서 사용할 수있는 객실을 확인하십시오. (익숙한 경우 : different question similar to this one,하지만 방금 사이트 디자인이 변경되었고 이제는 소유자가 변경되었습니다. 할 방법이 필요합니다. 날짜 범위 사이에 사용할 수있는 방을 검색하십시오 ...)호텔 예약 시스템 SQL : 날짜 범위

저는 호텔 예약 시스템에서 일하고 있으며, 날짜 범위 사이에 어떤 방이 있는지 찾아야합니다. . 기존의 '가용성'테이블 스키마가 간단하고, 열은 다음과 같습니다 예를 들어, 룸 # 6 월 5 년 1 월 1 일부터 점령, 경우

room_id 
date_occupied - a single day that is occupied (like '2011-01-01') 

그래서, 오 행 가용성 테이블에 추가 한 그 방을 점령 한 날마다.

나는 어떤 객실을 시작일과 종료일 사이에 사용할 수 있는지 (예 : 금연, 침대 크기 등의 다른 매개 변수를 필터링하는 동안) 쿼리를 알아 내려고합니다. 이 종류의 것 SQL 좋아 :

SELECT (a list of room IDs) FROM rooms, availability 
WHERE rooms.nonsmoking = 1 
    AND rooms.singlebed = 1 
    AND nothing between start_date and end_date is in availability.date_occupied 

내 다른 질문, 나는이 붙어 약간 정확한 쿼리를 결정하기 위해 시도하는 방법과 가장 효율적인 방법으로 테이블을 조인하는 방법입니다. 도와 주셔서 감사합니다.

답변

2

DB 구조가 제대로 이해되면 가용성이있는 행이없는 객실에서 행을 찾아야합니다.

SELECT r.* 
FROM rooms r 
    LEFT JOIN availability a ON (r.id = a.room_id 
AND a.date_occupied BETWEEN :start_date AND :end_date) 
WHERE a.id IS NULL