如何解决where子句中的时间问题


how to solve time issue in where clause

我的"用户"表如下所示。。

 id   |   name  |   time
 1    |    a1   |  2012-11-15 06:20:28
 2    |    a2   |  2012-11-14 06:20:28
 3    |    a3   |  2012-11-13 06:20:28

现在我的问题是,我如何获得时间在现在或30之间的用户详细信息比现在时间少一秒。。

我试过了。。

"SELECT * 
FROM user
WHERE strtotime(user_session.session_timestamp)-30 < ".time().")";

它不起作用。。。它将抛出语法错误

请帮我解决问题

不需要PHP。您可以使用MySQL的日期和时间函数。

SELECT * FROM user WHERE time BETWEEN (NOW() - INTERVAL 30 SECOND) AND NOW();

注意:此查询未进行优化,因为日期函数阻止缓存查询。如果这是一个很大的问题,那么使用PHP等效程序可能会更高性能。

strtotime()是一个PHP函数,而不是MySQL。

你不能那样做。您需要执行两个不同的SELECT语句。一个用于收集user_session.session_timestamp。调用PHP strtotime()函数-30,然后在当前的SELECT语句中使用该变量。根据您的设置方式,您可能会使用foreach( $array as $key => $value)逐步完成并运行所需的选择,以获得单独的回报。许多问题是SQL语句中使用的PHP函数。

或者照杰森说的做!纯SQL总是更好的,但我认为您出于某种原因需要或想要使用PHP,需要访问PHP中的数据有一些重要的原因。