我正在尝试从数据库中获取过去 14 天和 future 14 天的记录。过去我可以得到,但 future 是个问题。
这是我正在尝试的约会格式的示例(8 天示例),它在我的服务器上运行良好:
mysql> select DATE_SUB(CURDATE(),INTERVAL +8 DAY);
+-------------------------------------+
| DATE_SUB(CURDATE(),INTERVAL +8 DAY) |
+-------------------------------------+
| 2017-09-07 |
+-------------------------------------+
1 row in set (0.00 sec)
mysql> select DATE_SUB(CURDATE(),INTERVAL -8 DAY);
+-------------------------------------+
| DATE_SUB(CURDATE(),INTERVAL -8 DAY) |
+-------------------------------------+
| 2017-09-23 |
+-------------------------------------+
1 row in set (0.00 sec)
这似乎可以很好地获取过去和 future 的日期,但是,当尝试将其与我的实际查询内联时,它不想用于 future 的约会。
mysql> SELECT estatu,edates,etimes
FROM tevent
WHERE edates
BETWEEN DATE_SUB(CURDATE(),INTERVAL +8 DAY) AND CURDATE();
+----------+------------+--------+
| estatu | edates | etimes |
+----------+------------+--------+
| Upcoming | 2017-09-15 | 19:00 |
| Upcoming | 2017-09-15 | 17:00 |
| Results | 2017-09-09 | 15:00 |
| Upcoming | 2017-09-15 | |
| Results | 2017-09-08 | |
| Results | 2017-09-08 | 19:00 |
| Results | 2017-09-08 | 19:30 |
| Results | 2017-09-08 | 19:30 |
| Results | 2017-09-09 | 09:30 |
| Results | 2017-09-09 | 12:00 |
| Results | 2017-09-09 | 15:00 |
| Results | 2017-09-09 | 17:00 |
| Results | 2017-09-09 | 18:00 |
| Results | 2017-09-09 | 19:30 |
| Results | 2017-09-09 | 20:30 |
| Upcoming | 2017-09-15 | |
+----------+------------+--------+
16 rows in set (0.00 sec)
mysql> SELECT estatu,edates,etimes
FROM tevent
WHERE edates
BETWEEN DATE_SUB(CURDATE(),INTERVAL -8 DAY) AND CURDATE();
Empty set (0.00 sec)
这是迄今为止我尝试在此处和网络上其他地方找到的各种脚本所得到的最接近的结果。
此查询只是为了确认我有 future 的事件:
mysql> SELECT estatu,edates,etimes
FROM tevent
WHERE edates
LIMIT 10;
+----------+------------+--------+
| estatu | edates | etimes |
+----------+------------+--------+
| Upcoming | 2017-09-15 | 19:00 |
| Upcoming | 2017-09-15 | 17:00 |
| Upcoming | 2017-09-16 | 17:00 |
| Upcoming | 2017-09-23 | 15:00 |
| Upcoming | 2017-09-23 | 17:00 |
| Results | 2017-09-09 | 15:00 |
| Upcoming | 2017-09-15 | |
| Results | 2017-03-26 | |
| Results | 2017-04-02 | |
| Results | 2017-04-09 | |
+----------+------------+--------+
10 rows in set (0.00 sec)
编辑:我需要两个单独的结果,一个用于 future 事件,一个用于过去事件。每个请求都将通过单独的 PHP 页面连接独立请求。
========
解决方案:
感谢@etsa,发现问题出在格式上。下面的两个查询准确地提供了所需的内容,同样是 8 天的示例:
SELECT estatu,edates,etimes FROM tevent WHERE edates BETWEEN DATE_SUB(CURDATE(),INTERVAL +8 DAY) AND CURDATE();
SELECT estatu,edates,etimes FROM tevent WHERE edates BETWEEN CURDATE() AND DATE_SUB(CURDATE(),INTERVAL -8 DAY);
结果如下所示:
mysql> SELECT estatu,edates,etimes FROM tevent WHERE edates BETWEEN DATE_SUB(CURDATE(),INTERVAL +8 DAY) AND CURDATE();
+----------+------------+--------+
| estatu | edates | etimes |
+----------+------------+--------+
| Upcoming | 2017-09-15 | 19:00 |
| Upcoming | 2017-09-15 | 17:00 |
| Results | 2017-09-09 | 15:00 |
| Upcoming | 2017-09-15 | |
| Results | 2017-09-08 | |
| Results | 2017-09-08 | 19:00 |
| Results | 2017-09-08 | 19:30 |
| Results | 2017-09-08 | 19:30 |
| Results | 2017-09-09 | 09:30 |
| Results | 2017-09-09 | 12:00 |
| Results | 2017-09-09 | 15:00 |
| Results | 2017-09-09 | 17:00 |
| Results | 2017-09-09 | 18:00 |
| Results | 2017-09-09 | 19:30 |
| Results | 2017-09-09 | 20:30 |
| Upcoming | 2017-09-15 | |
+----------+------------+--------+
16 rows in set (0.00 sec)
mysql> SELECT estatu,edates,etimes FROM tevent WHERE edates BETWEEN CURDATE() AND DATE_SUB(CURDATE(),INTERVAL -8 DAY);
+----------+------------+--------+
| estatu | edates | etimes |
+----------+------------+--------+
| Upcoming | 2017-09-15 | 19:00 |
| Upcoming | 2017-09-15 | 17:00 |
| Upcoming | 2017-09-16 | 17:00 |
| Upcoming | 2017-09-23 | 15:00 |
| Upcoming | 2017-09-23 | 17:00 |
| Upcoming | 2017-09-15 | |
| Upcoming | 2017-09-15 | |
| Upcoming | 2017-09-16 | 19:30 |
| Upcoming | 2017-09-16 | 09:30 |
| Upcoming | 2017-09-16 | 19:30 |
| Upcoming | 2017-09-16 | 14:00 |
| Upcoming | 2017-09-16 | 15:00 |
| Upcoming | 2017-09-16 | 19:30 |
| Upcoming | 2017-09-17 | |
| Upcoming | 2017-09-17 | |
+----------+------------+--------+
15 rows in set (0.00 sec)
最佳答案
您没有获得 future 的日期,因为您的日期间隔不正确:
SELECT estatu,edates,etimes
FROM tevent
WHERE edates
BETWEEN DATE_ADD(CURDATE(),INTERVAL -8 DAY) AND DATE_ADD(CURDATE(),INTERVAL +8 DAY);
在 Between 子句中,首先是较低(较早)的值,其次是较高的值。
关于mysql 结果按 future 和过去的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46234535/