如果我检查日期 2019-01-12 是否在 12 月到 1 月的日期范围内,查询将给出空结果
Query gives empty result if I check whether the date 2019-01-12 falls with in a December to January date range
我正在创建一个基本的 Zodiac signs 应用程序,但我遇到了这个问题。
基本上,我只想检查今天是否在 mysql table.
中的特定日期范围内
注意(请忽略 2019 年。我只是为了查询方便而添加的)
这是我的 table:
Zodia Signs Table
$date = "2019-03-09"
$zodiacSign = DB::table('zodiac_signs')
->where(function ($query) use($date){
$query->where('from_date', '<=', $date)
->where('to_date', '>=', $date);
})->get();
除 2019-12-22 和 2019-01-19 之间的日期外,每个日期都按预期工作。我在这里做错了什么?
+-----+--------------+-------------------+-------------+-------------+-------------+----------------------+----------------------+----------------------+------------+
| id | name | symbol | icon | from_date | to_date | description | created_at | updated_at | deleted_at |
+-----+--------------+-------------------+-------------+-------------+-------------+----------------------+----------------------+----------------------+------------+
| 2 | Aries | The Ram | NULL | 2019-03-21 | 2019-04-19 | | 2019-07-17 03:09:07 | 2019-07-17 03:09:07 | NULL |
| 3 | Taurus | The Bull | NULL | 2019-04-20 | 2019-05-20 | | 2019-07-17 03:09:07 | 2019-07-17 03:09:07 | NULL |
| 4 | Gemini | The Twins | NULL | 2019-05-21 | 2019-06-20 | NULL | 2019-07-17 03:09:07 | 2019-07-17 03:09:07 | NULL |
| 5 | Cancer | The Crab | NULL | 2019-06-21 | 2019-07-22 | NULL | 2019-07-17 03:09:07 | 2019-07-17 03:09:07 | NULL |
| 6 | Leo | The Lion | NULL | 2019-07-23 | 2019-08-22 | NULL | 2019-07-17 03:09:07 | 2019-07-17 03:09:07 | NULL |
| 7 | Virgo | The Virgin | NULL | 2019-08-23 | 2019-09-22 | NULL | 2019-07-17 03:09:07 | 2019-07-17 03:09:07 | NULL |
| 8 | Libra | The Scales | NULL | 2019-09-23 | 2019-10-22 | NULL | 2019-07-17 03:09:07 | 2019-07-17 03:09:07 | NULL |
| 9 | Scorpio | The Scorpion | NULL | 2019-10-23 | 2019-11-21 | NULL | 2019-07-17 03:09:07 | 2019-07-17 03:09:07 | NULL |
| 10 | Sagittarius | The Archer | NULL | 2019-11-22 | 2019-12-21 | NULL | 2019-07-17 03:09:07 | 2019-07-17 03:09:07 | NULL |
| 11 | Capricorn | The Goat | NULL | 2019-12-22 | 2019-01-19 | NULL | 2019-07-17 03:09:07 | 2019-07-17 03:09:07 | NULL |
| 12 | Aquarius | The Water Bearer | NULL | 2019-01-20 | 2019-02-18 | NULL | 2019-07-17 03:09:07 | 2019-07-17 03:09:07 | NULL |
| 13 | Pisces | The Fishes | NULL | 2019-02-19 | 2019-03-20 | NULL | 2019-07-17 03:09:07 | 2019-07-17 03:09:07 | NULL |
+-----+--------------+-------------------+-------------+-------------+-------------+----------------------+----------------------+----------------------+------------+
也许您的意思是 from_date 是 2018-12-22,而不是 2019-12-22? (或者 to_date 应该是 2020 年。你懂的。N 年 12 月和 N+1 年 1 月)。
您可以尝试不同的逻辑来查找用户的星座。方法可能是这样的,假设用户的出生日期是 12 月 25 日。因此请使用您的数据库检查月份(12 月),它可能是 Sagittarius
或 Capricorn
。然后检查日 (25),因为日 > 22 那么黄道十二宫将是 Capricorn
.
如果我分解成步骤,
- 只设置月和日的范围,不添加年。检查
- 首先是用户的月份,然后找出哪两个可以是 his/her 签名检查
- 检查最终决定的日期
您可以尝试不同的 table 结构来适应这种方法。
快速而懒惰的解决方案是添加两次摩羯座。一次是年初的一部分(从 2018 年开始),一次是年底的一部分(到 2020 年结束)。如果不想让生肖出现两次,您需要将查询更新为 special-case 跨年线的生肖。
我正在创建一个基本的 Zodiac signs 应用程序,但我遇到了这个问题。 基本上,我只想检查今天是否在 mysql table.
中的特定日期范围内注意(请忽略 2019 年。我只是为了查询方便而添加的) 这是我的 table: Zodia Signs Table
$date = "2019-03-09"
$zodiacSign = DB::table('zodiac_signs')
->where(function ($query) use($date){
$query->where('from_date', '<=', $date)
->where('to_date', '>=', $date);
})->get();
除 2019-12-22 和 2019-01-19 之间的日期外,每个日期都按预期工作。我在这里做错了什么?
+-----+--------------+-------------------+-------------+-------------+-------------+----------------------+----------------------+----------------------+------------+
| id | name | symbol | icon | from_date | to_date | description | created_at | updated_at | deleted_at |
+-----+--------------+-------------------+-------------+-------------+-------------+----------------------+----------------------+----------------------+------------+
| 2 | Aries | The Ram | NULL | 2019-03-21 | 2019-04-19 | | 2019-07-17 03:09:07 | 2019-07-17 03:09:07 | NULL |
| 3 | Taurus | The Bull | NULL | 2019-04-20 | 2019-05-20 | | 2019-07-17 03:09:07 | 2019-07-17 03:09:07 | NULL |
| 4 | Gemini | The Twins | NULL | 2019-05-21 | 2019-06-20 | NULL | 2019-07-17 03:09:07 | 2019-07-17 03:09:07 | NULL |
| 5 | Cancer | The Crab | NULL | 2019-06-21 | 2019-07-22 | NULL | 2019-07-17 03:09:07 | 2019-07-17 03:09:07 | NULL |
| 6 | Leo | The Lion | NULL | 2019-07-23 | 2019-08-22 | NULL | 2019-07-17 03:09:07 | 2019-07-17 03:09:07 | NULL |
| 7 | Virgo | The Virgin | NULL | 2019-08-23 | 2019-09-22 | NULL | 2019-07-17 03:09:07 | 2019-07-17 03:09:07 | NULL |
| 8 | Libra | The Scales | NULL | 2019-09-23 | 2019-10-22 | NULL | 2019-07-17 03:09:07 | 2019-07-17 03:09:07 | NULL |
| 9 | Scorpio | The Scorpion | NULL | 2019-10-23 | 2019-11-21 | NULL | 2019-07-17 03:09:07 | 2019-07-17 03:09:07 | NULL |
| 10 | Sagittarius | The Archer | NULL | 2019-11-22 | 2019-12-21 | NULL | 2019-07-17 03:09:07 | 2019-07-17 03:09:07 | NULL |
| 11 | Capricorn | The Goat | NULL | 2019-12-22 | 2019-01-19 | NULL | 2019-07-17 03:09:07 | 2019-07-17 03:09:07 | NULL |
| 12 | Aquarius | The Water Bearer | NULL | 2019-01-20 | 2019-02-18 | NULL | 2019-07-17 03:09:07 | 2019-07-17 03:09:07 | NULL |
| 13 | Pisces | The Fishes | NULL | 2019-02-19 | 2019-03-20 | NULL | 2019-07-17 03:09:07 | 2019-07-17 03:09:07 | NULL |
+-----+--------------+-------------------+-------------+-------------+-------------+----------------------+----------------------+----------------------+------------+
也许您的意思是 from_date 是 2018-12-22,而不是 2019-12-22? (或者 to_date 应该是 2020 年。你懂的。N 年 12 月和 N+1 年 1 月)。
您可以尝试不同的逻辑来查找用户的星座。方法可能是这样的,假设用户的出生日期是 12 月 25 日。因此请使用您的数据库检查月份(12 月),它可能是 Sagittarius
或 Capricorn
。然后检查日 (25),因为日 > 22 那么黄道十二宫将是 Capricorn
.
如果我分解成步骤,
- 只设置月和日的范围,不添加年。检查
- 首先是用户的月份,然后找出哪两个可以是 his/her 签名检查
- 检查最终决定的日期
您可以尝试不同的 table 结构来适应这种方法。
快速而懒惰的解决方案是添加两次摩羯座。一次是年初的一部分(从 2018 年开始),一次是年底的一部分(到 2020 年结束)。如果不想让生肖出现两次,您需要将查询更新为 special-case 跨年线的生肖。