选择2 WEEKS old FROM NOW的所有行

时间:2013-06-19 21:45:02

标签: php mysql date

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

我的代码到目前为止:

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

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

谢谢!

6 个答案:

答案 0 :(得分:2)

试试这个

$notifications_query= "SELECT * FROM notifications WHERE yourdatecolumn BETWEEN  DATE_SUB(NOW(), INTERVAL 2 WEEK) AND NOW() ORDER BY recieved DESC";

答案 1 :(得分:1)

WHERE viewed BETWEEN (NOW() - INTERVAL 14 DAY) AND now()

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

试试这个

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

收到的定义必须是日期才能使查询正常工作。

答案 4 :(得分:0)

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

$twoweeksago = time()- (3600*24*14);
$notifications_query= "SELECT * FROM notifications WHERE viewed > {$twoweeksago}  ORDER BY recieved DESC";

答案 5 :(得分:0)

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

最简单的,如果您以后从未接受过的价值,那就是做......

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()。