2011-06-09 85 views
5

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

感謝

充其量
+0

什麼'SELECT now() - interval 7 day' return? – 2011-06-09 20:35:04

+0

它返回所有批准= 0的行 – 2by 2011-06-09 20:36:53

+0

否否,只需運行我添加爲註釋的SELECT查詢以返回時間值。它顯示了什麼價值? – 2011-06-09 20:37:55

回答

14

PHP的timstamps是一個簡單的整數,而MySQL的now()返回日期時間值。最有可能這將修復查詢:

SELECT ... WHERE user_regdate < unix_timestamp(now() - interval 7 day)) ... 

基本上,沒有unix_timstamp()調用,你比較蘋果和桔子。

+0

謝謝,它的作品! :) – 2by 2011-06-09 20:44:44

+0

愛Stackoverflow爲此原因...謝謝! – 2016-02-10 17:46:06

3

原始的解決方案了,但是我不是最好的MySQL的時間計算

$timestamp = strtotime("-7 days"); 
mysql_query("SELECT * FROM users WHERE user_regdate < $timestamp AND approved = 0 ORDER BY id"); 
+0

謝謝,也有作品:) – 2by 2011-06-09 20:46:12

1

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;"); 
0

試試這個;

select * 
from users 
WHERE DATE_SUB(user_regdate,INTERVAL 7 DAY) 
AND approved='0' 
order by id; 
+0

請注意,此查詢將強制MySQL執行全表掃描,並因此具有重大的性能影響。請參閱Marc的答案,以獲得更易於查詢索引。 – 2011-06-10 12:50:09