gpt4 book ai didi

PHP 和 MySQL : Comparing month and day with dynamic year

转载 作者:行者123 更新时间:2023-11-29 01:37:21 25 4
gpt4 key购买 nike

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

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

例如:

  • 标准价格是100/天

  • 10 月开始。 1 日二月。每年1号,价格80/天

  • 来自 6 月。 1 日 八月。每年31号价格为120/天

  • [...] 最多 6 个不同的价格变化(季节)

因为这是每年发生一次,我只需要月份和日期,但我不知道如何将这些值存储在数据库中。我在考虑有两个字段,一个用于月份,一个用于日期,其中包含数值(01-12 表示月份,01-31 表示日期)。这些值是用户自己设置的,是相对于item本身而言的,并不是对每个人都是固定的。

问题是,当有人进行预订时,我需要检查价格是否需要更改,但我不明白如何构建查询来进行检查。更糟糕的是,预订期间的价格可能有多个值。

按照上面的示例,如果我要从 9 月开始预订商品。 1 号(当年)7 月。 1st(明年),价格如下:

  • 100/天9 月开始。 1 日 9 月。 30 日

  • 80/天10 月开始。 1 日二月。第一名

  • 100/天2 月开始2 日 到 5 月 31 日

  • 120/天6 月开始。 1 日 七月。第一名

有没有什么方法可以检查这些情况,而不必每天循环并检查数据库是否匹配?

谢谢

最佳答案

检查日期时可以使用MySQL的date_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 <= 0518 <= 0531

完整示例:

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)

编辑:

阅读您对@FelipeDuarte 的回答的评论...从 10/01(10 月 1 日)到 02/01(2 月 1 日),我们需要考虑新的一年...

你可以通过将时间段分成两个部分来作弊:10/01 到 12/31 和 01/01 到 02/01

关于PHP 和 MySQL : Comparing month and day with dynamic year,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37308742/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com