【发布时间】:2014-01-07 21:23:22
【问题描述】:
这是我的数据库(酒店的免费房间,简化版)
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 晚(参见表“房间”) -> 因此上述查询不应返回任何记录
谢谢
【问题讨论】:
-
我怀疑在房间被占用而不是在可用时存储更常见
-
这个问题在 SO 上被问了大约 100 次,所以你下次可能要检查已经回答的问题