【发布时间】:2012-01-16 20:44:40
【问题描述】:
我有一个每小时在我的 php 网站上运行的脚本。在那个脚本中,我想要某种 MySQL 查询来删除表中的每条记录,但说最新的 50 条。
我该怎么做呢?
// pseudo code: like this?
DELETE from chat WHERE id = max (ID - 50)
【问题讨论】:
-
可以在表格中添加时间戳字段吗?
-
如果您的 ID 列是自增为 1 的标识列,您可以这样做:
DELETE FROM chat WHERE ID NOT IN(SELECT TOP 50 ID FROM chat ORDER BY ID DESC) -
在这种情况下使用:
DELETE FROM chat WHERE datecol NOT IN(SELECT TOP 50 datecol FROM chat ORDER BY datecol DESC)-- SQL ServerDELETE FROM chat WHERE datecol NOT IN(SELECT datecol FROM chat ORDER BY datecol DESC LIMIT 50) --MySQL -
@user1022585 - 我认为您应该根据时间跨度(x 和 x 之间)而不是记录数来删除。是否有某些原因必须是最后 50 个,而不是时间段/跨度?
-
#1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
标签: mysql sql-delete records