2

我有一个查询,它从我的数据库中的表中选择所有数据行。我正在使用 PHP 和 MySQL。我不想抓取我表中的所有行,而只想抓取现在到两周之间的行。我怎样才能做到这一点?我知道我需要添加一个 WHERE 子句

到目前为止我的代码:

$notifications_query= "SELECT * FROM notifications ORDER BY recieved DESC";

包含将要使用的日期的列名为“已查看”,格式为“日期时间”。

谢谢!

4

6 回答 6

2

尝试这个

$notifications_query= "SELECT * FROM notifications WHERE yourdatecolumn BETWEEN  DATE_SUB(NOW(), INTERVAL 2 WEEK) AND NOW() ORDER BY recieved DESC";
于 2013-06-19T21:48:45.427 回答
2
WHERE viewed BETWEEN (NOW() - INTERVAL 14 DAY) AND now()
于 2013-06-19T21:48:51.337 回答
1

您可以使用包含此处说明的 datediff() 函数的 where 子句

http://www.w3schools.com/sql/func_datediff.asp

于 2013-06-19T21:49:14.853 回答
0

尝试这个

$notifications_query= "SELECT * FROM notifications WHERE viewed BETWEEN START_DATE AND END_DATE "; 

收到的定义必须是日期才能使查询起作用。

于 2013-06-19T21:47:53.440 回答
0

我认为这应该可以解决问题:

$twoweeksago = time()- (3600*24*14);
$notifications_query= "SELECT * FROM notifications WHERE viewed > {$twoweeksago}  ORDER BY recieved DESC";
于 2013-06-19T21:48:08.570 回答
0

你有各种各样的答案,因为有很多方法可以做到这一点——还有一些微妙之处。

最简单的,如果你收到的价值是 NEVER 在未来,是做类似的事情......

WHERE received > DATE_SUB( CURDATE(), INTERVAL 14 DAY )

或者

WHERE DATEDIFF( CURDATE(), received ) < 14

如果您收到的值也可以是将来的值,并且您只想要从 14 天前到今天的切片,那么这并不难:

WHERE received BETWEEN DATE_SUB( CURDATE(), INTERVAL 14 DAY ) AND CURDATE()

或者再次,

WHERE DATEDIFF( CURDATE(), received ) BETWEEN 0 AND 14

除此之外,您还应该考虑一件事:收到的是日期字段还是日期时间字段?与日期时间相比,CURDATE() 始终是今天的午夜,因此这些 BETWEEN 查询实际上可能会忽略当天的日期时间——因为它们将在(例如)2013-06-19 00:00:00 之后, CURDATE 的日期时间值。如果这对您来说是个问题,请改用 NOW()。

于 2013-06-19T22:05:29.547 回答