2012-07-12 103 views
1

我在sql數據庫中有一個名爲time_stamp的字段,該記錄被添加到數據庫時是時間戳。我還有另一個名爲'TTL'的字段,其中將存儲1,2或3個字段(此字段中的每個數字表示一天)。我可以有一個php腳本,刪除記錄是由'TTL'字段決定的嗎?php刪除腳本

例如,今天中午添加了一條記錄,'TTL'爲2,我可以有一個腳本在兩天後的中午刪除同一記錄嗎?

什麼是最好的方式來做到這一點,我真的需要這兩個領域來執行此?

+1

你想讓別人爲你寫腳本嗎? – roymustang86 2012-07-12 19:19:26

+0

不是真的,我打算給它一個刺,但想要從不同的角度來看它應該如何完成。我有點難以啓動。 – need2nobasis 2012-07-12 19:27:34

回答

1

運行此腳本的最佳方法是將其附加到cron,並讓它以給定間隔運行。

然後,爲了將記錄刪除程序,你需要運行下面的查詢:

DELETE FROM records WHERE UNIX_TIMESTAMP(time_stamp) + TTL * 86400 <= CURRENT_TIMESTAMP()

time_stamp是你的記錄創造價值 - 讓我們說這是等於1000000 86400是一天中的秒數。 TTL是您希望文件刪除後time_stamp後的天數。所以,如果TTL是2到1000000是爲7月10日的時間戳,我們基本上比較:

百萬+ 86400 * 2 = < CURRENT_TIMESTAMP

現在,讓我們說,今天是7月12日。這意味着7月10日之後是2天(86400 * 2秒)。因此,

CURRENT_TIMESTAMP = July 10th timestamp + 2 days worth of seconds 
        = 1000000 + 86400 * 2 

這期間和7月12日之後的某個時間意味着CURRENT_TIMESTAMP >= 1000000 + 86400 * 2所有點,從而刪除記錄。

這會在服務器運行時每天爲您刪除記錄。享受和祝你好運!

+0

這將刪除每日記錄,但如果用戶選擇該記錄在第二天之後或第三天之後而不是第一天刪除,該怎麼辦? – need2nobasis 2012-07-12 19:26:28

+0

不,這將只刪除在給定日期應該刪除的記錄。 86400代表全天的「unix time」,並作爲刪除條件(如果TTL = 2,則僅在第2天刪除,如果TTL = 3,則僅在第3天刪除) – 2012-07-12 19:27:41

+0

我現在明白了,謝謝,但UNIX_TIMESTAMP參考。如果我正在使用current_timestamp屬性爲'on update current_timestamp',這會起作用嗎? – need2nobasis 2012-07-12 19:59:51