0

mysqlデータベースにアクティビティログが保存されており、それぞれに日時が登録されています。60日以上経過したすべてのログを削除する短いphpスクリプトを作成しようとしています。日時形式で時刻を比較しようとして問題が発生しました。

これが私が持っているものです:

$sixty_days_past = strtotime("-60 days");

$earliest_time = date("Y-m-d H:i:s", $sixty_days_past);

$logs_result = mysql_query("SELECT id FROM df_logs WHERE date < '$earliest_time'");

    while($logs_row = mysql_fetch_array($logs_result)) { 

        $oldentry = $logs_row['id'];

        mysql_query("DELETE FROM df_logs WHERE id='$oldentry'");    

    }

このクエリの何が問題になっていますか?

4

1 に答える 1

1

すべての。

DELETE FROM `df_logs` WHERE `date` < DATE_ADD(NOW(),INTERVAL -60 DAY)

終わり。


詳細に:

  • MySQLが適切な計算を完全に実行できる場合、PHPを使用します。
  • dateがキーワードであるため問題となる、フィールド名をバッククォートで囲んでいない。
  • 行を一度に1つずつ削除するため、一度にすべての行を削除するのではなく、バインドされていない可能性のある数のクエリが発生します(IN削除するIDを一覧表示するなど)。
于 2012-04-24T00:30:32.757 に答える