是否有MySQL查询会删除表中的所有值,但最新的20个条目除外(按id
排序)?
所以假设我有一个表notifications
,其中有1000个通知,我想只保留最新的20个。
如果SQL不够,使用php
是可选的。
我有一些想法如何做到这一点,但我并不认为它们有效。
答案 0 :(得分:0)
您可以找到最新的ID,将其存储到本地变量中,然后删除此ID下面的所有内容:
set @tmp_id := (select id from notifications order by id desc limit 20,1);
delete from notifications where id <= @tmp_id;
答案 1 :(得分: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");