我有一个用户表,其中用户需要被批准,我想显示未被批准并且在7天前以前注册的用户。从MySQL表中选择PHP时间戳比X更早的行
我user_regdate是用PHP time()函数创建一个时间戳。
这是我尝试,它不工作:
mysql_query("select * from users WHERE user_regdate < now() - interval 7 day AND approved='0' order by id;");
感谢
充其量我有一个用户表,其中用户需要被批准,我想显示未被批准并且在7天前以前注册的用户。从MySQL表中选择PHP时间戳比X更早的行
我user_regdate是用PHP time()函数创建一个时间戳。
这是我尝试,它不工作:
mysql_query("select * from users WHERE user_regdate < now() - interval 7 day AND approved='0' order by id;");
感谢
充其量PHP的timstamps是一个简单的整数,而MySQL的now()
返回日期时间值。最有可能这将修复查询:
SELECT ... WHERE user_regdate < unix_timestamp(now() - interval 7 day)) ...
基本上,没有unix_timstamp()调用,你比较苹果和桔子。
谢谢,它的作品! :) – 2by 2011-06-09 20:44:44
爱Stackoverflow为此原因...谢谢! – 2016-02-10 17:46:06
原始的解决方案了,但是我不是最好的MySQL的时间计算
$timestamp = strtotime("-7 days");
mysql_query("SELECT * FROM users WHERE user_regdate < $timestamp AND approved = 0 ORDER BY id");
谢谢,也有作品:) – 2by 2011-06-09 20:46:12
php的时间()函数输出一个Unix时间戳(自1970年1月1日的秒数)。 MySQL的now()函数输出一个格式化的日期(如2011-6-9 12:45:34)...所以我不认为你可以像这样比较它们。
尝试使用Unix的时间戳,零下7天,而不是现在()在您的查询:
$7_days_ago = time() - (7 * 24 * 60 * 60);
mysql_query("select * from users WHERE user_regdate <" . $7_days_ago . " AND approved='0' order by id;");
试试这个;
select *
from users
WHERE DATE_SUB(user_regdate,INTERVAL 7 DAY)
AND approved='0'
order by id;
请注意,此查询将强制MySQL执行全表扫描,并因此具有重大的性能影响。请参阅Marc的答案,以获得更易于查询索引。 – 2011-06-10 12:50:09
什么'SELECT now() - interval 7 day' return? – 2011-06-09 20:35:04
它返回所有批准= 0的行 – 2by 2011-06-09 20:36:53
否否,只需运行我添加为注释的SELECT查询以返回时间值。它显示了什么价值? – 2011-06-09 20:37:55