0

最新の 20 エントリ (順) を除いて、テーブルからすべての値を削除する MySQL クエリはありますidか?

たとえばnotifications、1000 件の通知が存在する table があり、最新の 20 件のみを保持したいとします。

SQL がこれに十分でない場合、使用phpはオプションです。

これを行う方法はいくつかありますが、実際には効率的だとは思いません。

4

2 に答える 2

0

私はこれを実行していないので、機能しない場合は申し訳ありませんが、削除の 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");
于 2012-12-04T22:58:59.697 に答える
0

最新の ID を見つけてローカル変数に保存し、この ID の下のすべてを削除できます。

set @tmp_id := (select id from notifications order by id desc limit 20,1);
delete from notifications where id <= @tmp_id;
于 2012-12-04T22:51:20.517 に答える