最新の 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;