簡體   English   中英

酒店預訂系統SQL:識別日期范圍內的任何可用房間

[英]hotel reservation system SQL: identify any room available in date range

(如果這似乎熟悉:我問一個類似這樣的一個不同的問題 ,但我剛剛得到了一份說明,網站的設計已經改變,現在的業主想辦法尋找任何房間是一個日期范圍之間的可用那么這是一個新問題...)

我正在建立一個酒店預訂系統,我需要找到一系列日期之間的房間。 現有的“可用性”表模式很簡單,列是:

room_id
date_occupied - a single day that is occupied (like '2011-01-01')

因此,例如,如果從1月1日到1月5日占用#6房間,則可用表中會添加五行,每天占用一個房間。

我正在試圖找出查詢,以查找開始和結束日期之間可用的房間(同時還過濾其他一些參數,如禁煙,床大小等)...在偽SQL中它將是有點像:

 SELECT (a list of room IDs) FROM rooms, availability WHERE rooms.nonsmoking = 1 AND rooms.singlebed = 1 AND nothing between start_date and end_date is in availability.date_occupied 

和我的另一個問題一樣,我有點卡住試圖確定確切的查詢以及如何以最有效的方式加入表格。 謝謝您的幫助。

如果我正確理解了您的數據庫結構,您需要在房間中找到一行,並且在可用性中沒有相應的行。

SELECT r.* 
FROM rooms r
  LEFT JOIN availability a ON (r.id = a.room_id 
 AND a.date_occupied BETWEEN :start_date AND :end_date)
WHERE a.id IS NULL

暫無
暫無

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

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