我有一个查询,从我的数据库中的表中选择所有数据行。我正在使用PHP和MySQL。而不是抓住我桌子上的所有行,我想只抓住从现在到两周之间的行。我怎样才能做到这一点?我知道我需要添加一个WHERE子句
我的代码到目前为止:
$notifications_query= "SELECT * FROM notifications ORDER BY recieved DESC";
包含将使用的日期的列名为“已查看”,并且采用“日期时间”格式。
谢谢!
答案 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()函数
答案 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()。