簡體   English   中英

MySQL查詢日期范圍

[英]MySQL querying date range

這是我的數據庫(酒店的免費房間,簡化)

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之間可用的所有房間

我的查詢如下:

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

我的問題:

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

謝謝

date> ='2013-12-20'和date <='2013-12-22'

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

我沒有對此進行測試,但它應該指向正確的方向,尤其是關於最小范圍的問題的第二部分。

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進行比較。 您也可以考慮將開始日期和結束日期綁定到變量,這樣您只需要編寫一次日期。

暫無
暫無

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

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