Php 计算跨多个季节类型住宿的总费用(票价)

Php 计算跨多个季节类型住宿的总费用(票价),php,mysql,cakephp,cakephp-2.0,Php,Mysql,Cakephp,Cakephp 2.0,我正在为客户开发一个住宿预订平台,该平台需要利用基于日期范围的动态定价。有多种定价范围,称为季节。例如,旺季、旺季和淡季可能有不同级别的定价 我还应该声明,我正在使用CakePHP——尽管这不会真正影响它——因此我不一定能进行核心MySQL查询,但我非常感谢这些类型的答案,因为我可能能够在Cake中实现原始MySQL查询 以下是我的设想: 用户选择从2015-08-15-2015-09-15预订住宿 例如 2015年8月15日至2015年8月30日和 季中运价从2015-09-01-2015-0

我正在为客户开发一个住宿预订平台,该平台需要利用基于日期范围的动态定价。有多种定价范围,称为季节。例如,旺季、旺季和淡季可能有不同级别的定价

我还应该声明,我正在使用CakePHP——尽管这不会真正影响它——因此我不一定能进行核心MySQL查询,但我非常感谢这些类型的答案,因为我可能能够在Cake中实现原始MySQL查询

以下是我的设想:

用户选择从2015-08-15-2015-09-15预订住宿 例如 2015年8月15日至2015年8月30日和 季中运价从2015-09-01-2015-09-30再次运行,如下所示 实例 用户可在15天内享受两种价格 高峰期和中期各15天 定价并不像每晚x那么简单,但现在这已经无关紧要了

假设峰值成本为每晚50美元,中间成本为每晚25美元,那么如何计算这一价格呢?将日期范围和相应的成本存储到数组并遍历它们的解决方案会比返回成本总和的原始MySQL查询更好吗?根据一年中的预订期,大约有5个季节类型,我认为返回最相关的一个可能会很棘手

我们非常感谢任何关于这一挑战的说明

亲切问候,,
西蒙

我不想告诉你什么是“最好的”,但我会给你一些建议

DROP TABLE IF EXISTS rates;

CREATE TABLE rates
(season_id INT NOT NULL PRIMARY KEY
,season_type VARCHAR(12) 
,season_start DATE NOT NULL
,season_end DATE NOT NULL 
,rate INT NOT NULL
);

INSERT INTO rates VALUES
(1,'Peak','2015-08-15','2015-08-30',50),
(1,'Mid' ,'2015-09-01','2015-09-30',25);


SELECT * FROM rates;
+-----------+-------------+--------------+------------+------+
| season_id | season_type | season_start | season_end | rate |
+-----------+-------------+--------------+------------+------+
|         1 | Peak        | 2015-08-15   | 2015-08-30 |   50 |
|         2 | Mid         | 2015-09-01   | 2015-09-30 |   25 |
+-----------+-------------+--------------+------------+------+

SELECT x.*
     , DATEDIFF(season_end,'2015-08-15') 
  FROM rates x 
 WHERE '2015-08-15' >= season_start
 UNION
SELECT x.*
     , DATEDIFF('2015-09-15',season_start) 
  FROM rates x 
 WHERE '2015-09-15' <= season_end;
+-----------+-------------+--------------+------------+------+-----------------------------------+
| season_id | season_type | season_start | season_end | rate | DATEDIFF(season_end,'2015-08-15') |
+-----------+-------------+--------------+------------+------+-----------------------------------+
|         1 | Peak        | 2015-08-15   | 2015-08-30 |   50 |                                15 |
|         2 | Mid         | 2015-09-01   | 2015-09-30 |   25 |                                14 |
+-----------+-------------+--------------+------------+------+-----------------------------------+

请注意,8月有31天

谢谢您。这对我来说是一个很好的起点。我以您的指导为出发点,最终使用PHP的DatePeriod类并存储了一个季节中每天的费率,以便在预订与两个定价季节甚至3个定价季节重叠时,能够适应两个定价范围。非常感谢。