从SQL表中删除除了最后X个条目以外的所有内容?

时间:2012-12-04 22:41:49

标签: php mysqli

是否有MySQL查询会删除表中的所有值,但最新的20个条目除外(按id排序)?

所以假设我有一个表notifications,其中有1000个通知,我想只保留最新的20个。

如果SQL不够,使用php是可选的。

我有一些想法如何做到这一点,但我并不认为它们有效。

2 个答案:

答案 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");