MySQL查询日期范围

时间:2013-12-19 10:43:14

标签: php 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之间可用的所有房间

我的查询如下:

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

我的问题:

  • 有更舒适的方式吗?当日期范围为2周时,查询也会很长(查询时间会更长)
  • 是否可以考虑最小范围 - 例如:room_id 2仅适用于至少5晚(参见表格“房间”) - >所以上面的查询应该不返回任何记录

由于

3 个答案:

答案 0 :(得分:1)

日期> ='2013-12-20'和日期< ='2013-12-22'

答案 1 :(得分:1)

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

答案 2 :(得分: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进行比较。您也可以考虑将开始日期和结束日期绑定到变量,这样您只需要编写一次日期。