有关日期范围和数据库日期计算的任何建议

时间:2014-08-05 09:55:49

标签: php mysql

请考虑以下数据集......

RATE_ID YEAR  MONTH  WEEK_RATE  DAY_RATE
1       2014  01     364        52
2       2014  02     364        52
3       2014  03     364        52
4       2014  04     427        61
5       2014  05     455        65
6       2014  06     546        78
7       2014  07     665        95
8       2014  08     728        104
9       2014  09     546        78
10      2014  10     455        65
11      2014  11     364        52
12      2014  12     364        52

同样的Sqlfiddle ... sqlfiddle.com/#!2/9a541/6/0

如果输入2014-07-28 to 2014-08 08,结果应该是2014-07赛季的4晚和2014-08赛季的7晚,所以计算2014-07赛季的4x day_rate和2014-08赛季的7x day_rate 。因此,期望的结果将如下所示:

夜晚:2014年7月= 4 =€380

夜晚:2014年8月= 7 =€665(仅限日期范围超过上个月末)

总夜数:= 11 =€1045

我该怎么做。

我希望这很清楚,但如果没有请问。任何帮助都会很棒。

由于

1 个答案:

答案 0 :(得分:0)

如果您有某种实用程序表(比如所有可能日期的表),那么您可以在MySQL中完成所有操作,就像这样......

 SELECT * 
   FROM calendar c 
   JOIN rates r 
     ON r.year = YEAR(c.dt) 
    AND r.month = MONTH(c.dt) 
  WHERE c.dt >= '2014-07-28' AND c.dt < '2014-08-08';
 +------------+---------+------+-------+-----------+----------+
 | dt         | rate_id | year | month | week_rate | day_rate |
 +------------+---------+------+-------+-----------+----------+
 | 2014-07-28 |       7 | 2014 | 07    | 665       | 95       |
 | 2014-07-29 |       7 | 2014 | 07    | 665       | 95       |
 | 2014-07-30 |       7 | 2014 | 07    | 665       | 95       |
 | 2014-07-31 |       7 | 2014 | 07    | 665       | 95       |
 | 2014-08-01 |       8 | 2014 | 08    | 728       | 104      |
 | 2014-08-02 |       8 | 2014 | 08    | 728       | 104      |
 | 2014-08-03 |       8 | 2014 | 08    | 728       | 104      |
 | 2014-08-04 |       8 | 2014 | 08    | 728       | 104      |
 | 2014-08-05 |       8 | 2014 | 08    | 728       | 104      |
 | 2014-08-06 |       8 | 2014 | 08    | 728       | 104      |
 | 2014-08-07 |       8 | 2014 | 08    | 728       | 104      |
 +------------+---------+------+-------+-----------+----------+

......所以......

 SELECT SUM(day_rate) 
   FROM calendar c 
   JOIN rates r 
     ON r.year = YEAR(c.dt) 
    AND r.month = MONTH(c.dt) 
  WHERE c.dt >= '2014-07-28' 
    AND c.dt < '2014-08-08';
 +---------------+
 | SUM(day_rate) |
 +---------------+
 |          1108 |
 +---------------+

你也可以使用一些连接和UNION伪造它。但是,PHP解决方案可能更实用,但我会将其留给PHP专家。