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

时间:2013-02-19 18:50:31

标签: php mysql

我的'用户'表看起来像是......

 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或30之间的用户详细信息 第二次比现在的时间少..

我试过..

"SELECT * 

FROM user

WHERE strtotime(user_session.session_timestamp)-30 < ".time().")";

它不起作用......它会抛出语法错误

请帮我解决问题

3 个答案:

答案 0 :(得分:5)

不需要PHP。您可以使用MySQL Date and Time functions

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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