首页 > 解决方案 > 如果总行数超过 3,则从表中删除最后一行

问题描述

仅当总行数超过 3 时,才从表中删除最后一行。

如何确定记录总数是否超过 3,然后才删除最后一行或最旧行?

DELETE FROM `wp_comments` WHERE `comment_post_ID` = 23 ORDER BY `comment_ID` LIMIT 1

标签: mysqlsql

解决方案


我们可以尝试在这里进行连接删除,借助ROW_NUMBER

DELETE wp1
FROM wp_comments wp1
INNER JOIN
(
    SELECT comment_ID, ROW_NUMBER() OVER (ORDER BY comment_ID DESC) rn
    FROM wp_comments
) wp2
    ON wp2.comment_ID = wp1.comment_ID
WHERE
    wp2.rn > 3;

这里的策略是为表中的每条记录分配一个行号,comment_ID用作排序。最旧条目的行号计数从 1 开始,然后从那里增加。我们删除除最近 3 条以外的任何记录。

请注意,上述方法需要 MySQL 8+,如果您使用的是早期版本的 MySQL,现在可能是升级的好时机。


推荐阅读