20

7日後にMySQLデータベースからいくつかのメッセージを削除したい。

私のメッセージテーブルの行の形式は次のとおりです。メッセージ| 日にち

日付は通常の形式のタイムスタンプです。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;
$$;
4

3 に答える 3

25

この条件を使用してみることができます:

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の回避策がなく、システムとスムーズに統合されます。

于 2012-12-31T01:24:22.307 に答える
10

これでうまくいくはずです。

DELETE FROM messages WHERE date < (CURDATE() - INTERVAL 7 DAY);
于 2012-12-31T01:21:08.260 に答える
2

1and1のような共有ホスティングを使用していて、イベントを作成できない場合は、webcronを使用することもできます。

実行したいphpスクリプトのURLをwebcronに伝えるだけで、必要な間隔でトリガーされます。

于 2014-04-15T14:29:55.140 に答える