我有一個用戶表,其中用戶需要被批准,我想顯示未被批准並且在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