簡體   English   中英

在選擇房間可用性時使用MySQL查詢

[英]Using MySQL query in selecting room availability

在房間預訂方面,我在酒店預訂中有此數據庫結構

下面是我的room桌子

room_num    roomtype     
101         Single    
102         Single    
103         Single    
111         Deluxe    
112         Deluxe   
113         Deluxe    
114         Deluxe    
115         Deluxe    
116         Deluxe    
121         Superior  
122         Superior  

下表是room_booked ,它記錄了預訂的房間號

dor是簽入日期, dco是簽出日期

room_num        dor         dco
  111        2014-06-01  2014-06-06
  112        2014-06-01  2014-06-06
  113        2014-06-01  2014-06-06
  114        2014-06-01  2014-06-06
  115        2014-06-01  2014-06-06
  116        2014-06-01  2014-06-06
  112        2014-05-18  2014-05-21
  113        2014-08-01  2014-08-04

在這種情況下,所有豪華客房都從2014-06-012014-06-06預訂。 然后,我通過使用以下MySQL代碼選擇了2014年6月1日至2014年6月6日可用的豪華間

SELECT
    room.room_num
FROM
    room
LEFT JOIN
    room_booked ON room_booked.room_num = room.room_num
WHERE
    (
        (
            dor IS NULL AND dco IS NULL
        )
        OR (
            -- wished booking date is before DOR
            '2014-06-06' < dor
            -- OR wished booking date is after DCO
            OR '2014-06-01' >=  dco
        )
    )
    -- room type
    AND roomtype = 'Deluxe'

但是顯示的是豪華房號。 在上面所選日期范圍之前和之后預訂的112和113,而不是0或已滿。 有解決此代碼的解決方案嗎?

我認為您必須同時檢查兩個日期才能入住和退房:

SELECT
    room.room_num
FROM
    room
WHERE
  roomtype = 'Deluxe' AND
  room.room_num not in 
  (
    SELECT
      room_booked.room_num
    FROM
      room_booked
    WHERE
      (room_booked.dor<='2014-06-1' and room_booked.dco>='2014-06-1')
      OR
      (room_booked.dor<'2014-06-06' and room_booked.dco>='2014-06-06')
      OR
      (room_booked.dor>='2014-06-01' and room_booked.dco<'2014-06-06')
   )

重新編輯答案並創建一個sqlfiddle進行測試

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM