2017-09-15 78 views
1

我试图从数据库中获取最近14天的记录以及仅仅将来的14天。过去我可以得到,但未来是一个问题。mysql的结果按日期将来和过去

这里是我工作的服务器上精细什么约会的格式我想(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) 

这似乎很好地工作,让过去和将来的日期,但是,当试图它与我的实际查询内联,它不想为未来的约会工作。

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) 

这是我到目前为止尝试的各种脚本,在这里和其他地方在网上找到。

这个查询只是为了确认我的未来事件:

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) 

编辑:我需要两个独立的结果,一个是未来事件,一个是过去的事件。每个请求将独立于单独的PHP页面连接。

=========

SOLUTION:

由于@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) 

回答

0

尝试:

SELECT estatu,edates,etimes 
FROM tevent 
WHERE edates 
BETWEEN CURDATE() AND DATE_SUB(CURDATE(),INTERVAL -8 DAY); 
1

你没有得到将来的日期,因为你的不间right:

SELECT estatu,edates,etimes 
FROM tevent 
WHERE edates 
    BETWEEN DATE_ADD(CURDATE(),INTERVAL -8 DAY) AND DATE_ADD(CURDATE(),INTERVAL +8 DAY); 

在between子句中,lower(先前)值first,higher value second。

+0

非常感谢@ sloan-thrasher,但是我发现当只使用“WHERE edates DATE_ADD(CURDATE(),INTERVAL +8 DAY);”请隔离它仍然不提供结果 – JanBal

+0

如果这是您使用的确切子句,则不应产生任何结果。使用''edates <= DATE_ADD''' ...而不是 –

0

其他答案都不给你,你问什么了,但是这并不:

SELECT 
    estatu, 
    edates, 
    etimes 
FROM tevent 
WHERE 
    edates BETWEEN DATE_SUB(CURDATE(),INTERVAL 14 DAY) AND 
        DATE_ADD(CURDATE(),INTERVAL 14 DAY); 

如果你想单独查询,以过去和现在,你可以使用:

SELECT estatu, edates, etimes 
FROM tevent 
WHERE edates BETWEEN DATE_SUB(CURDATE(),INTERVAL 14 DAY) AND CURDATE() 

过去,这对未来:

SELECT estatu, edates, etimes 
FROM tevent 
WHERE edates BETWEEN CURDATE() AND DATE_ADD(CURDATE(),INTERVAL 14 DAY) 
+0

非常感谢@ tim-biegeleisen,您的答案适用于组合结果,但作为两个单独的查询,它没有提供所需的结果。我的要求应该更清楚。 – JanBal

+0

您可能不正确地分解了查询。让我更新。 –

相关问题