PHP和MySQL:比较月和日与动态年

PHP和MySQL:比较月和日与动态年,php,mysql,date,date-comparison,Php,Mysql,Date,Date Comparison,我在处理一个应用程序时遇到了一些问题,我希望能得到一些指导 我有一个简单的预订系统:每件商品都有一个标准价格,但在某些时期价格会发生变化 例如: select date_format('2016-05-18', '%m%d'); +-----------------------------------+ | date_format('2016-05-18', '%m%d') | +-----------------------------------+ | 0518

我在处理一个应用程序时遇到了一些问题,我希望能得到一些指导

我有一个简单的预订系统:每件商品都有一个标准价格,但在某些时期价格会发生变化

例如:

select date_format('2016-05-18', '%m%d');
+-----------------------------------+
| date_format('2016-05-18', '%m%d') |
+-----------------------------------+
| 0518                              |
+-----------------------------------+
1 row in set (0,01 sec)
标准价格是100/天

每年10月1日至2月1日,价格为80/天

每年6月1日至8月31日,价格为120/天

[…]多达6种不同的价格变化季节

因为这是每年发生的事件,我只需要月份和日期,但我不知道如何将这些值存储在数据库中。我想有两个字段,一个用于月份,一个用于日期,其中数字值01-12表示月份,01-31表示日期。这些值是由用户自己设置的,它们是相对于项目本身的,不是每个人都固定的

问题是,当有人预订时,我需要检查价格是否需要更改,我不知道如何构建查询来检查这一点。最糟糕的是,在一个预定期间,价格可能有多个值

按照上面的例子,如果我要从今年9月1日到明年7月1日预订商品,价格如下:

9月1日至9月30日100/天

10月1日至2月1日80/天

2月2日至5月31日,每天100英镑

6月1日至7月1日120/天

是否有任何方法可以检查这些案例,而不必每天循环检查数据库是否匹配


谢谢

我不知道您的数据库表,但我想您可以这样做:

得到你的经期,在一天,在一个月,在一天,在一个月 您的表需要有以下字段:ini_日、ini_月、ini_日月、end_日、end_月、end_日月、price_日 从表中选择* 其中iniDay>=预订ini\U日和INIMOUNT>=预订ini\U月-获取初始期间 和iniDay=预订ini月 和endDay检查日期时可以使用MySQL date_格式函数

例如:

select date_format('2016-05-18', '%m%d');
+-----------------------------------+
| date_format('2016-05-18', '%m%d') |
+-----------------------------------+
| 0518                              |
+-----------------------------------+
1 row in set (0,01 sec)
所以,你可以用简单的时间间隔检查一下:今天是0518,它介于2月2日和5月31日之间:


0202目前,我的表的结构与您描述的相同,只是我没有月和日的组合字段。我会马上做一些测试,然后给你回复。幸好它不起作用。用户书籍的日期不一定在某个范围内,但只有几天可能在某个范围内,因此where子句不正确。谢谢,我会试试。但是看到您的查询,如果所有的比较都是以一个天和一个月进行的,那么此时daymonth字段的用途是什么?如果您需要进行另一次比较、查询、排序依据、分组依据、添加年份或仅显示该信息,它将已经在您的手中。无需使用cast或concat数据。非常感谢您的帮助。所以现在我可以找到某个日期的价格。但我的问题是我找不到日期范围的价格。你是说我每天都要问吗?因此,如果我预订10天,从9月1日到9月11日,我必须循环10次,然后找到合适的价格。是这样吗?我知道演出会有点糟糕,但我预计最多30天的预订时间。再次感谢您。这可能有用。但我理解您的问题略有不同:如果给定的时间段重叠两个时间段,将有两种不同的价格…是的,考虑到用户想要预订商品的范围,每天的价格可能会有所不同。也许两天是100天,另外两天是80天,三天是150天,依此类推,这取决于表中的总周期。最后,我想我可以每天查询并加上价格:正如我所说,最多可能有30/40天,或者你可以用不同的方式来做。查询所有时段及其每日价格,并根据预订时段检查相应的时段。在PHP中,它应该更快、更容易操作。
select price, date_from, date_to from mytable where date_format(now(), '%m%d') between date_from and date_to;
+-------+-----------+---------+
| price | date_from | date_to |
+-------+-----------+---------+
|   100 | 0202      | 0531    |
+-------+-----------+---------+
1 row in set (0,01 sec)