我有一个查询,它从我的数据库中的表中选择所有数据行。我正在使用 PHP 和 MySQL。我不想抓取我表中的所有行,而只想抓取现在到两周之间的行。我怎样才能做到这一点?我知道我需要添加一个 WHERE 子句
到目前为止我的代码:
$notifications_query= "SELECT * FROM notifications ORDER BY recieved DESC";
包含将要使用的日期的列名为“已查看”,格式为“日期时间”。
谢谢!
尝试这个
$notifications_query= "SELECT * FROM notifications WHERE yourdatecolumn BETWEEN DATE_SUB(NOW(), INTERVAL 2 WEEK) AND NOW() ORDER BY recieved DESC";
WHERE viewed BETWEEN (NOW() - INTERVAL 14 DAY) AND now()
您可以使用包含此处说明的 datediff() 函数的 where 子句
尝试这个
$notifications_query= "SELECT * FROM notifications WHERE viewed BETWEEN START_DATE AND END_DATE ";
收到的定义必须是日期才能使查询起作用。
我认为这应该可以解决问题:
$twoweeksago = time()- (3600*24*14);
$notifications_query= "SELECT * FROM notifications WHERE viewed > {$twoweeksago} ORDER BY recieved DESC";
你有各种各样的答案,因为有很多方法可以做到这一点——还有一些微妙之处。
最简单的,如果你收到的价值是 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()。