我正在处理的一个应用程序有点问题,我希望能得到一些指导。
我有一个简单的预订系统:每件商品都有一个标准价格,但有时价格会发生变化。
例如:
标准价格为100/天
从每年的Oct. 1st
到Feb. 1st
价格是80/天
从每年的Jun. 1st
到Aug. 31st
价格是120/天
[…]多达6种不同的价格变化(季节)
因为这是一年一次,我只需要月和日,但我不知道如何将这些值存储在数据库中。我想有两个字段,一个用于月,一个用于日,其中包含数值(01-12
表示月,01-31
表示日)。这些值是由用户自己设置的,它们是相对于项本身的,并不是每个人都固定的。
问题是,当有人预订时,我需要检查价格是否需要更改,我不知道如何构建查询来检查这一点。最糟糕的是,在一个预定期间,价格可以有多个值。
按照上面的例子,如果我要预订从Sep. 1st (current year)
到Jul. 1st (next year)
的商品,价格如下:
100/天,从Sep. 1st
到Sep. 30th
80/天,从Oct. 1st
到Feb. 1st
从Feb. 2nd
to May 31st
开始每天100次
120/天,从Jun. 1st
到Jul. 1st
有没有什么方法可以检查这些案例,而不必每天循环检查数据库是否匹配?
谢谢你
最佳答案
检查日期时可以使用MySQLdate_format
函数。
例如:
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完整示例:
desc mytable;
+-----------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+---------+------+-----+---------+-------+
| date_from | char(4) | YES | | NULL | |
| date_to | char(4) | YES | | NULL | |
| price | int(11) | YES | | NULL | |
+-----------+---------+------+-----+---------+-------+
3 rows in set (0,00 sec)
select * from mytable;
+-----------+---------+-------+
| date_from | date_to | price |
+-----------+---------+-------+
| 0901 | 0930 | 100 |
| 1001 | 0201 | 80 |
| 0202 | 0531 | 100 |
| 0601 | 0701 | 120 |
+-----------+---------+-------+
4 rows in set (0,00 sec)
示例查询:
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)
编辑:
阅读你对“费利佩杜特的回答”的评论。。。从10月1日(10月1日)到2月1日(2月1日),我们需要考虑新年。。。
你可以把时间分成两段来作弊:10/01到12/31和01/01到02/01
关于php - PHP和MySQL:将月份和日期与动态年份进行比较,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37308742/