簡體   English   中英

酒店預訂檢查抵達日期和離開日期之間的空房間?

[英]hotel booking check empty room between arrival date and departure date?

基本上,我從房間表中檢索所有帶有到達和離開日期的可用房間。

SQL查詢

SELECT * FROM `roomcalendar` where day BETWEEN '2016-08-25' and '2016-08-31'

結果是

id day        roomname avaroom
 1 2016-08-25 RoomA          0
 2 2016-08-26 RoomA          2
 3 2016-08-27 RoomA          0
 4 2016-08-28 RoomA          1
 5 2016-08-29 RoomA          1
 6 2016-08-30 RoomA          0
 7 2016-08-31 RoomA          1

如果 avaroom 不等於到達日期和離開日期之間的 0,我只想要可用房間

我想要結果

SQL查詢

SELECT * FROM `roomcalendar` where day BETWEEN '2016-08-25' and '2016-08-31'

結果必須是空的

SQL查詢

 SELECT * FROM `roomcalendar` where day BETWEEN '2016-08-25' and '2016-08-26'

結果必須是空的

SQL查詢

 SELECT * FROM `roomcalendar` where day BETWEEN '2016-08-26' and '2016-08-27'

它顯示一個結果

SQL查詢

SELECT * FROM `roomcalendar` where day BETWEEN '2016-08-26' and '2016-08-28'

結果必須是空的

SQL查詢

SELECT * FROM `roomcalendar` where day BETWEEN '2016-08-28' and '2016-08-30'

它顯示兩個結果

謝謝。

如果 avaroom 不等於到達日期和離開日期之間的 0,我只想要可用房間

所以如果你重新表述這個:

  • 如果兩個日期之間沒有avaroom = 0 的行,則您想要房間。

用 SQL 翻譯:

select * from roomcalendar
where day between '2016-08-25' and '2016-08-31'
and not exists (
  select * from roomcalendar
  where day between '2016-08-25' and '2016-08-31'
  and avaroom = 0
);

你也可以這樣說:

  • 如果 avaroom 不為 0 的行數是預期的總行數(在這種情況下,這對應於天數),則您想要房間

用 SQL 翻譯:

select * from roomcalendar
where day between '2016-08-25' and '2016-08-31'
and avaroom != 0
having count(*) = datediff('2016-08-31','2016-08-25') + 1

您可能需要稍微調整查詢,但這應該為您指明正確的方向。

像這樣修改查詢。

SELECT * FROM `bookings` WHERE `room_id` = '1' 
AND booking_end >= '2020-12-01 13:20:00' AND booking_start <= '2020-12-10 13:20:00'

暫無
暫無

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

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