我正在尝试创建一个MySQL查询,以便从一个日期范围与另一个日期范围之间的表中选择每日价格。我只想使用“季节”表中的“开始结束”月份和日期,我想动态地将年份传递给查询。
这是我的疑问:(我给它年份排除桌面上的那个)
SELECT a.season, b.base_price
FROM seasons a
JOIN pricebyseason b ON a.id=b.season_id
WHERE b.prop_id='6' AND '2015-11-29' BETWEEN DATE_FORMAT(a.starting,'2015-%m-%d') AND DATE_FORMAT(a.ending,'2016-%m-%d')
ORDER BY b.base_price DESC
它适用但不适用于所有日期。
这些是表格:
季节(这些是静态日期值)
+----+--------------+------------+------------+
| id | season | starting | ending |
+----+--------------+------------+------------+
| 1 | Peak Season | 2015-12-11 | 2016-01-09 |
| 2 | High Season | 2015-11-27 | 2016-04-15 |
| 3 | Mid Season | 2015-04-16 | 2015-09-01 |
| 4 | Low Season | 2015-09-02 | 2015-11-26 |
| 5 | Spring Break | 2015-03-05 | 2015-03-21 |
+----+--------------+------------+------------+
pricebyseason
+----+---------+-----------+------------+
| id | prop_id | season_id | base_price |
+----+---------+-----------+------------+
| 1 | 6 | 1 | 950 |
| 2 | 6 | 2 | 750 |
| 3 | 6 | 3 | 450 |
| 4 | 6 | 4 | 400 |
| 5 | 6 | 5 | 760 |
+----+---------+-----------+------------+
我想要的是查询签到,结账选择之间的透明价格 我创建了这个sqlfiddle:http://sqlfiddle.com/#!9/4a6f4
这是一个无效的先前查询:
SELECT a.base_price,b.season,b.starting,b.ending
FROM pricebyseason a JOIN seasons b ON a.season_id=b.id
WHERE a.prop_id='6' AND
(DATE_FORMAT(b.starting,'%m-%d') <= '12-27' OR DATE_FORMAT(b.starting,'2016-%m-%d') >= '2015-12-27')
AND
(DATE_FORMAT(b.ending,'%m-%d') >= '12-27' OR DATE_FORMAT(b.ending,'2016-%m-%d') <= '2015-12-27')
ORDER BY base_price DESC
以下是每个季节的一些示例日期:'2016-01-08','2015-12-27','2016-04-14','2015-11-29','2016-04- 15' , '2015年9月1日', '2016年9月2日', '2015年11月26日', '2016年10月10日', '2016年3月18日', '2016年6月22日' , '2015年6月15日'
非常感谢