2017-04-02 18 views
3

私はWindowsフォームでホテルの予約システムを作っています。ユーザーはホテルIDを選択してcheck_incheck_outの日付を指定してホテルの部屋を予約します。今度は部屋番号(room_no)からtblReservation()の客室番号(room_no)、check_inの部屋番号(room_no)を検索したいのですが、tblRoomから部屋番号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

サンプルdbをダウンロードしました。サンプルデータを提供する場合は、おそらく必要なクエリを与えることができます。 –

答えて

2

2が与えられたhotel_idcheck in/check out日付のためのすべての自由の部屋(inout日付が含まれているあなたを与えるクエリ#、 05/n〜10/nの場合は6days)

クエリ#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:3

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

問合せ:

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 | 
関連する問題