2011-08-23 141 views
1

我有一個關於刪除已經註冊超過24小時的所有未激活帳戶的問題。我正在使用MSSQL。刪除所有未激活的帳戶

數據庫設置:

account | usrActivated | regTime 
test   0   1314223187 

SQL查詢:

$time = 24 * (60 * 60); 
DROP FROM ACCOUNT_TBL_DETAIL WHERE usrActivated=0 AND regTime < $time 

將這項工作,如果我執行這樣的查詢?刪除超過24小時的未激活帳戶。

+1

爲什麼不先嚐試使用SELECT? –

+1

爲什麼要將日期存儲爲unix時間戳而不是本機Sql Server'DATE'類型? – NullUserException

+0

沒有理由,我只是不知道該怎麼辦。 – SilentCoder

回答

4
delete from ACCOUNT_TBL_DETAIL 
where usrActivated=0 AND regTime <= UNIX_TIMESTAMP(DATE_SUB(now(), INTERVAL 1 DAY)); 

假設你在MySQL上。

刪除用於從數據庫中刪除表。刪除用於從表中刪除記錄。

+0

對不起,我的意思是刪除。我在SQL Server中使用MSSQL。我不認爲Now()是MSSQL中的一個函數。 – SilentCoder

+0

@Silent - 對於SQL Server,你可以使用'regTime <= DATEADD(DAY,-1,GETDATE())' –

+0

@Martin但是這會給你一個日期,而不是一個unix時間戳 – NullUserException

1

不像你表達過的那樣,因爲那根本不會刪除任何東西。無論如何,除非你有1970年創建的賬戶。試試這個:

DELETE FROM ACCOUNT_TBL_DETAIL 
WHERE usrActivated = 0 
    AND regTime < UNIX_TIMESTAMP(NOW() - INTERVAL 1 DAY) 

不要忘了做一個測試運行(更換DELETESELECT *),以確保這你想要做什麼。

+0

現在()不是MSSQL中的函數,我猜測。 – SilentCoder

+0

那麼,既然你沒有指定MSSQL,我們怎麼知道呢? – cdhowie

+0

對不起,還有其他方法嗎? – SilentCoder

0

聽起來不太懷疑,但我想你最終可能會刪除在此SQL實際執行之前註冊的人。他/她可能正處於激活階段。

+0

(usrActivated = 0)標識任何沒有註冊的人,但第二部分(檢查一天的時間間隔)會最終刪除剛剛註冊的人(但尚未激活)。 – Arun

+0

這就是爲了防止數據庫乾淨填充垃圾郵件的關鍵。那麼,在註冊他們的賬戶後誰沒有激活他們的賬戶將被刪除。 – SilentCoder

+0

讓我們說我在11:59 PM註冊,瀏覽頻道觀看更好的東西。刪除腳本在上午12:00開始(我開始註冊後1分鐘)。我終於決定和Jimmy Fallon一起觀看深夜。我回來完成註冊 - 嘗試激活。那麼會發生什麼? – Arun

0

讓我們說我在11:59 PM註冊,瀏覽頻道看 更好的東西。刪除腳本在凌晨12:00(在 我開始註冊後1分鐘)開始。我終於決定與Jimmy Fallon一起觀看深夜。我回來完成註冊 - 嘗試激活。 然後會發生什麼? - 阿倫11年8月24日15:50

你可以使它到哪裏它刪除單獨滅活。不僅僅是他們註冊後的一天,而是三天?或者你想要的時間很長。但是這並不像劇本每隔三天就會爲整個網站開火。這將只是一個人。除非多個用戶同時註冊,否則這將是腳本唯一會觸發的時間。希望這能回答你的問題。