[SQL] SQL 쿼리는 객실 가용성을 검색합니다
SQLSQL 쿼리는 객실 가용성을 검색합니다
내가 가진 후속 테이블은 다음과 같습니다 :
CUSTOMERS (CustomerID, firstname, surname etc)
ROOMS (RoomID, RoomType, Description)
BOOKING (BookingID, CustomerID, Arrival Date, Departure Date, number of people, total cost)
ROOMS_BOOKED (BookingID, RoomID)
사용자는 두 날짜의 도착과 출발 일자를 입력합니다. 객실 가용성 그리고 확인합니다. 나는 데이터베이스에 자신을 삽입 한 순간에 예약 한 방은있다. 예약 테이블은 이제 BookingID = 1, CustomerID를 = 1, 도착 일 = 24/03/2015, 출발 날짜 = 26/03/2015, 사람들 = 1, 총 비용 = 40.00의 수를 포함하고 그래서. 그런 다음 스탠다드 룸입니다 ROOMS_BOOKED 테이블 I 유무 BookingID = 1, RoomID = 2인치
나는이 SQL 코드를 사용하고 있습니다 -
SELECT RoomType FROM ROOMS WHERE RoomID NOT IN (SELECT RoomID FROM ROOMS_BOOKED)
이 쿼리는 예약되지 않은 객실을 반환하지만, 임이 찾고있는 사람이되지 않는 것. 예를 들어 사용자가 데이터베이스에 예약 동일 날짜를 선택합니다. 그래서 저는, www.galgorm.com과 비슷한 무언가를 다음 페이지의 모든 객실 유형을 표시하고 그 선택된 날짜에 예약되어있는 특정 유형의 객실에 대한 X 또는 무언가를 표시 할 수 있어야합니다.
나는이 도움을 필요로 매번 내가 대답이나 도움의 형태를 결코 이것에 대해 질문을 게시 할 수 있습니다. 나는 지금 그것을 마무리 할 수 있도록하려면, 지금까지 디자인이 호텔의 시스템을 가지고있다.
제발 도와주세요, 물론 때로는 같은 상황 필요한 도움에 있었던 메신저.
해결법
-
==============================
1.다음과 같은 경우가
다음과 같은 경우가
The user's selected period: --------[---------]------- Booking no1 [-----]------------------- Booking no2 --------------------[----] Booking no3 -----[----]--------------- Booking no4 -----------[---]---------- Booking no5 ------[-------]----------- Booking no6 --------------[--------]-- Booking no7 -----[----------------]---
당신은 기간이 교차하는 찾을해야합니다. 물론 경우 1과 2는 무료입니다. 예약의 시작 날짜 또는 예약의 종료일 중 하나가 사용자의 선택에있는 경우 당신이 검색 할 수있는 쉬운 3,5,6 케이스 잡을 수 있습니다. 사용자의 선택 날짜 중 하나가 예약 사이에있을 것입니다 경우에 당신이 필요 케이스 4, 7 찾을 수 있습니다.
그래서 다음은 무료로 객실을 찾습니다
DECLARE @ArrivalDate AS DATETIME DECLARE @DepartureDate AS DATETIME SELECT RoomType FROM ROOMS WHERE RoomID NOT IN ( SELECT RoomID FROM BOOKING B JOIN ROOMS_BOOKED RB ON B.BookingID = RB.BookingID WHERE (ArrivalDate <= @ArrivalDate AND DepartureDate >= @ArrivalDate) -- cases 3,5,7 OR (ArrivalDate < @DepartureDate AND DepartureDate >= @DepartureDate ) --cases 6,6 OR (@ArrivalDate <= ArrivalDate AND @DepartureDate >= ArrivalDate) --case 4 )
-
==============================
2.이 [도착, 출발] 기간 내에서 사용할 수있는 경우이 쿼리 목록 각 방 쇼의 모든 객실과
이 [도착, 출발] 기간 내에서 사용할 수있는 경우이 쿼리 목록 각 방 쇼의 모든 객실과
SELECT RoomType, case when NOT EXISTS (SELECT RoomID FROM ROOMS_BOOKED rb JOIN BOOKING b on b.BookingID = rb.BookingID WHERE rb.RoomID = r.Id and ArrivalDate < 'param Departure Date here' and DepartureDate > 'param Arrival Date here') then 1 else 0 end IsAvailable FROM ROOMS r
-
==============================
3.여기에 내가 사용할 수없는 객실을 확인하기 위해 사용되는 샘플 쿼리는 쿼리는 사용할 수없는 객실을 반환합니다
여기에 내가 사용할 수없는 객실을 확인하기 위해 사용되는 샘플 쿼리는 쿼리는 사용할 수없는 객실을 반환합니다
SELECT roomno FROM tbl_ReservedRooms WHERE ((fromdate BETWEEN @checkindate AND @checkoutdate ) OR (todate BETWEEN @checkindate AND @checkoutdate)) AND status = 'Active'
-
==============================
4.rm.Room_id NOT IN은 ( '$ FROM_DATE'와 '$ TO_DATE') OR ( '$ FROM_DATE'BETWEEN bk.departure_date와 '$ TO_DATE') BETWEEN BK WHERE (bk.arrive_date 예약 구별 Room_id을 선택 룸 Rm의 SELECT * OR (bk.arrive_date < '$ FROM_DATE'AND bk.departure_date> '$ TO_DATE'))
rm.Room_id NOT IN은 ( '$ FROM_DATE'와 '$ TO_DATE') OR ( '$ FROM_DATE'BETWEEN bk.departure_date와 '$ TO_DATE') BETWEEN BK WHERE (bk.arrive_date 예약 구별 Room_id을 선택 룸 Rm의 SELECT * OR (bk.arrive_date < '$ FROM_DATE'AND bk.departure_date> '$ TO_DATE'))
from https://stackoverflow.com/questions/29213183/sql-query-to-search-for-room-availability by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 정수와 일, 월 및 연도 주어진 SQL Server에서 날짜를 만드는 방법 (0) | 2020.07.04 |
---|---|
[SQL] 선택 권한, 데이터베이스 'mssqlsystemresource', 스키마 'SYS'대상 '을 sysobjects'에 거부 (0) | 2020.07.04 |
[SQL] 어떻게 교리 andWhere 및 orWhere를 사용 하는가? (0) | 2020.07.04 |
[SQL] 약한 개체에 대한 데이터베이스 모델링 (0) | 2020.07.04 |
[SQL] 카테고리의 큰 불확정 번호 교차 (0) | 2020.07.04 |