2017-04-02 292 views
3

我正在以窗體形式建立酒店預訂系統。用戶通過選擇酒店ID並給出check_incheck_out日期來預訂酒店房間。現在,我想從tblRoom檢索房間號(room_no)他們不是在tblReservation那裏(我的意思是還沒有預訂房間),而且那些在tblReservation但不是之間的check_in的房間號(room_no)和check_out日期。下面的代碼允許我獲得room_id,但我需要room_no酒店房間預訂的SQL查詢

SqlCommand cmd = new SqlCommand(@"SELECT room_id FROM tblRoom WHERE ([email protected]_id AND 
       room_id NOT IN (SELECT room_id FROM tblReservation)) union select room_id from tblReservation 
       where (@endDate<check_in or @startDate>check_out) and [email protected]_id", con); 

這裏是我的表:

enter image description here

+0

請給我們一個數據樣本來測試。 – Blag

+0

請給我們一個你想要的輸出樣本。 –

+0

我下載了你的樣本數據庫。如果你提供樣本數據,我可能會給你你需要的查詢。 –

回答

2

查詢#2給大家一個給定的hotel_idcheck in/check out日的免費客房(該inout日期都包括在內,對於05/n到10/n,你留6天)

查詢#3會給你所有租用的房間與以前的參數。


SQL Fiddle

的MySQL 5.6架構設置

CREATE TABLE TblReservation 
    (`reservation_id` int, `hotel_id` int, `room_id` int, `check_in` date, `check_out` date) 
; 

INSERT INTO TblReservation 
    (`reservation_id`, `hotel_id`, `room_id`, `check_in`, `check_out`) 
VALUES 
    (1, 1, 1, '2017-04-01', '2017-04-02'), 
    (2, 1, 1, '2017-04-06', '2017-04-10'), 
    (3, 1, 2, '2017-04-01', '2017-04-03'), 
    (4, 1, 4, '2017-04-01', '2017-04-10'), 
    (5, 2, 5, '2017-04-01', '2017-04-10') 
; 


CREATE TABLE TblRoom 
    (`room_id` int, `hotel_id` int, `room_num` int) 
; 

INSERT INTO TblRoom 
    (`room_id`, `hotel_id`, `room_num`) 
VALUES 
    (1, 1, 1100), 
    (2, 1, 1200), 
    (3, 1, 1300), 
    (4, 1, 1400), 
    (5, 2, 2500) 
; 

查詢1

set @hotel_id = 1, @check_in = '2017-04-03', @check_out = '2017-04-05' 

查詢2

select TblRoom.* 
from TblRoom 
left join TblReservation 
    on TblRoom.hotel_id = TblReservation.hotel_id 
     and TblRoom.room_id = TblReservation.room_id 
     and TblReservation.check_out >= @check_in 
     and TblReservation.check_in <= @check_out 
where 
    TblRoom.hotel_id = @hotel_id 
    and TblReservation.reservation_id IS NULL 

Results

| room_id | hotel_id | room_num | 
|---------|----------|----------| 
|  1 |  1 |  1100 | 
|  3 |  1 |  1300 | 

查詢3

select 
    TblRoom.*, 
    date_format(check_in,'%Y-%m-%d') check_in, 
    date_format(check_out,'%Y-%m-%d') check_out 
from TblRoom 
inner join TblReservation 
    on TblRoom.hotel_id = TblReservation.hotel_id 
     and TblRoom.room_id = TblReservation.room_id 
     and TblReservation.check_out >= @check_in 
     and TblReservation.check_in <= @check_out 
where 
    TblRoom.hotel_id = @hotel_id 

Results

| room_id | hotel_id | room_num | check_in | check_out | 
|---------|----------|----------|------------|------------| 
|  2 |  1 |  1200 | 2017-04-01 | 2017-04-03 | 
|  4 |  1 |  1400 | 2017-04-01 | 2017-04-10 |