我计划开发一个酒店管理系统,其中每家酒店都有/拥有特定天数的价格。速率值存储在另一个很好的表中。
表如下。
我用来检查特定日期范围内是否存在现有费率的 SQL 查询。
SELECT * FROM `hotel_rate`
WHERE
(from_date <= '2013-04-18' AND to_date <= '2013-04-22') OR
(from_date >= '2013-04-18' AND to_date >= '2013-04-22') OR
(from_date >= '2013-04-18' AND to_date <= '2013-04-22') OR
(from_date <= '2013-04-18' AND to_date >= '2013-04-22')
我想要做的是将日期范围从“2013-04-18”添加到“2013-04-22”。从“2013-04-20”到“2013-04-23”的日期范围已经添加了费率。因此,我想通知正在添加费率的管理员,他/她选择的特定时期已经应用了费率。
问题是我的 SQL 查询从数据库中获取所有行,因为我只想获取速率重叠的特定行。在我的示例结果集中应该只包含 id = 4 的行。
鉴于据我所知,在添加费率之前,我应该检查以下 4 个条件。两条黑线显示酒店的现有价格。黄线显示可能的重叠场景。在任何给定的集合中,第一条黄线是 from_date,第二条黄线是 to_date。
我怎样才能解决这个问题 ?我怎样才能得到重叠率行?