2012-12-31 12 views
12

7日後に私のMySQLデータベースからいくつかのメッセージを削除したいと思います。特定の時間の後にMySQLレコードを削除する方法

メッセージテーブルの行のフォーマットは次のとおりです。 id |メッセージ|日付

日付は通常の形式のタイムスタンプです。 2012-12-29 17:14:53

私は、MySQLイベントがcronジョブの代わりに行く方法だと考えていました。

経験豊富なSQLの人には簡単な質問がありますが、下の括弧で削除メッセージの部分をどのように記述すればよいですか?

例はありがたいです、ありがとう。

DELIMITER $$ 
    CREATE EVENT delete_event 
    ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY 
    ON COMPLETION PRESERVE 
    DO 
    BEGIN 
     DELETE messages WHERE date >= (the current date - 7 days); 
    END; 
$$; 

答えて

14

あなたはこの条件を使用して試すことができます:

WHERE date < DATE_SUB(NOW(), INTERVAL 7 DAY) 

全体のSQLスクリプトは次のようになります。

CREATE EVENT delete_event 
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY 
ON COMPLETION PRESERVE 

DO BEGIN 
     DELETE messages WHERE date < DATE_SUB(NOW(), INTERVAL 7 DAY); 
END; 

しかし、あなたの場所に私がして、与えられた問題を解決するだろうシンプルなcronスクリプト。これを行う理由は簡単です。コードを維持したり、醜いSQLの回避策を使用したりするのが簡単で、システムとスムーズに統合できます。 1and1年代のように、共有ホスティングであり、およびイベントを作成することができない人そこにそれらのために

+0

あなたの意見をお寄せいただきありがとうございます。私が持っている問題は、私がCronスクリプトについて何もないことです。しかし、イベントはMySQLのスレッド上で実行されることに気づきます – Mike

7

これはトリックを行う必要があります。

DELETE FROM messages WHERE date < (CURDATE() - INTERVAL 7 DAY); 
+0

ありがとう@Michael Mior、私はそれを試してみましたが、それはうまく動作します – Mike

+0

もちろん時間の間隔は狭いです:-) – Mike

+0

喜んで助けました: ) –

2

は、代替は、あなたがちょうどあなたがしたいPHPスクリプトのURL webcron伝える必要がありwebcron

を使用することですあなたが望む間隔であなたのためにそれを誘発します。

関連する問題