2013-12-19 159 views
0

這裏是我的數據庫(在酒店免費客房,簡體)的MySQL查詢日期範圍

rooms_available

id date_available room_id 
================================ 
1 2013-12-19  2 
2 2013-12-20  2 
3 2013-12-21  2 
4 2013-12-22  2 
5 2013-12-23  2 
6 2013-12-25  3 

客房

id name   minimal_range 
================================ 
2 Apartment A 5 
3 Apartment B 1 

我想查詢所有2013年12月20日至2013年12月22日和2013年12月22日期間可以使用的客房 -

我的查詢是這樣的:

select * 
from rooms_available 
where (date='2013-12-20' OR date='2013-12-21' OR date='2013-12-22') 

我的問題:

  • 是有一個更舒適的方式?當日期範圍爲2周時,查詢也會很長(查詢需要更長的時間)
  • 是否可以考慮最小範圍 - 例如:room_id 2僅適用於至少5晚(見表 「房間」) - >所以上面的查詢應返回任何記錄

感謝

+0

我懷疑這是更常見的存儲房間時,而不是當他們可用 – Strawberry

+0

這個問題被問了100次左右,所以你可能想要檢查下次已經回答的問題 – jeroenvisser101

回答

1

日期> = '2013年12月20日' 和日期< = '2013年12月22日'

1
SELECT * FROM rooms_available WHERE `date_available` BETWEEN "2013-12-20 " AND "2012-03-31" 
0

我沒有測試這個,但它應該指向你在裏特別是針對你的問題的第二部分,關於最小範圍。

SELECT t1.id as id, t1.date_available as date_available, t1.room_id 
FROM rooms_availble as t1 JOIN rooms as t2 on t1.room_id = t2.id 
WHERE t1.date_available BETWEEN DATE('2013-12-20') AND DATE('2012-03-31') AND 
t2.minimal_range <= datediff('2013-12-22', '2012-12-20'); 

MySQL的datediff函數將返回兩個日期之間的天數,那麼你可以用minimal_range從房間連接表只是進行比較。你也可以考慮把開始日期和結束日期綁定到變量上,這樣你只需要寫一次日期。