2013-12-19 113 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从房间连接表只是进行比较。你也可以考虑把开始日期和结束日期绑定到变量上,这样你只需要写一次日期。