最新の 20 エントリ (順) を除いて、テーブルからすべての値を削除する MySQL クエリはありますid
か?
たとえばnotifications
、1000 件の通知が存在する table があり、最新の 20 件のみを保持したいとします。
SQL がこれに十分でない場合、使用php
はオプションです。
これを行う方法はいくつかありますが、実際には効率的だとは思いません。
私はこれを実行していないので、機能しない場合は申し訳ありませんが、削除の SQL 構文によると、これは機能するはずです。
DELETE FROM notifications ORDER BY id ASC LIMIT ((SELECT COUNT(*) FROM notifications)-20);
$result = $mysqli->query("SELECT ids FROM notifications");
$count = $result->num_rows;
$count -=20;
$result = $mysqli->query("DELETE FROM notifications ORDER BY id ASC LIMIT $count");
最新の ID を見つけてローカル変数に保存し、この ID の下のすべてを削除できます。
set @tmp_id := (select id from notifications order by id desc limit 20,1);
delete from notifications where id <= @tmp_id;