Php MySQL查询日期范围

Php MySQL查询日期范围,php,mysql,Php,Mysql,这是我的数据库(酒店免费客房,简化版) 可用房间: 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 mini

这是我的数据库(酒店免费客房,简化版)

可用房间

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
房间

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周时,查询也将非常长(这将花费更长的时间进行查询)
  • 是否可以考虑最小范围?例如:RoMySID 2至少可供5个晚上使用(见表“房间”)->因此,上述查询应该不返回记录

谢谢你,我没有测试这一点,但它应该为你指出正确的方向,特别是关于最小范围问题的第二部分

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');
选择t1.id作为id,t1.date\u可用作为date\u可用,t1.room\u id
从房间\u可作为t1连接房间作为t1上的t2。房间\u id=t2.id
其中t1.date_在日期('2013-12-20')和日期('2012-03-31')之间可用,并且

t2.minimal_range我想在房间有人入住时,而不是有人入住时,更常见的做法是储存。这个问题被问了大约100次,所以下次你可能要检查已经回答的问题