我不确定这是否可以使用MySQL,它有点复杂,但我会尽力解释。
我修改住宿可用性&基于现有数据库的价格检查系统。访客可以选择抵达和离开日期,我希望能够显示这些日期的所有房价/优惠。简单。但是,可以将优惠设置为仅适用于给定日期范围的第一部分,并且可以为该房间类型设置第二速率,涵盖日期范围的后半部分。
e.g。我选择9月29日至10月3日入住。房间1的费率已经设定为9月1日至30日,第二次是10月1日至31日。
我可以查询表格以检查除了跨越整个范围的费率之外,同一房间ID的成对(或者甚至更多)费率是否共同覆盖日期范围,并检索费率&对那些人的描述?
下面的查询检查在给定日期之间有效的基本费率(其中roomtype是房间的ID):
SELECT id, caption, price, startdate, enddate, nights, roomtype,
(@arrival := DATE('2011-09-29')) AS arrivaldate,
(@departure := DATE('2011-10-05')) AS departuredate
FROM bnbrates
WHERE
bnb_ref = 16639
AND active = 'TRUE'
AND rooms != 0
AND @arrival < enddate
AND @departure > startdate
AND roomtype != ''
ORDER BY roomtype, enddate, startdate, price;
这是存储数据的示例:
id | caption | price | startdate | enddate | nights | roomtype | arrivaldate | departuredate
-------------------------------------------------------------------------------------------------------------------
23553 | Single | 50 | 2011-10-01 | 2011-10-31 | 1 | 1064 | 2011-09-29 | 2011-10-05
23544 | Double | 55 | 2011-09-01 | 2011-09-30 | 1 | 1647 | 2011-09-29 | 2011-10-05
23545 | Double | 80 | 2011-10-01 | 2011-10-31 | 1 | 1647 | 2011-09-29 | 2011-10-05
30312 | Triple | 109 | 2011-09-01 | 2011-09-30 | 1 | 1649 | 2011-09-29 | 2011-10-05
34234 | Executive | 109 | 2011-09-01 | 2011-09-30 | 1 | 1653 | 2011-09-29 | 2011-10-05
23569 | Executive | 99 | 2011-10-01 | 2011-10-31 | 1 | 1653 | 2011-09-29 | 2011-10-05
例如,期望的结果将23544与23545和34234与23569
组合提前感谢您的帮助,如果这没有意义,请道歉......