2011-08-29 60 views
1

我如何能在表中删除所有行recentposts如何删除所有行除了50最新

DELETE FROM recentposts WHERE recentposts.`userId` = 12 AND recentposts.`Id` 
NOT IN (SELECT * FROM recentposts WHERE `userId` = 12 ORDER BY viewdate LIMIT 50) 

我尝试了很多与此类似,但他们没有工作。有人能告诉我如何在Mysql中做到这一点。

+0

你是指最新的5个或最新的50个? – gbn

回答

3

这是怎么回事?

DELETE FROM recentposts 
WHERE 
    recentposts.`userId` = 12 
    AND 
    recentposts.`Id` NOT IN (SELECT Id 
     FROM recentposts 
     WHERE `userId` = 12 
     ORDER BY viewdate DESC LIMIT 50) 
2
DELETE FROM `recentpost` 
WHERE WHERE userId = 12 AND id NOT IN (
    SELECT id 
    FROM (
    SELECT id 
    FROM `table`   
    ORDER BY id DESC 
    LIMIT 50 
) foo 
); 

PS:只工作(的MySQL 5.0.67和上)在早期版本这些都是MySQL的限制。

  • 您无法在同一查询中从给定表中删除和选择。
  • MySQL在子查询中不支持LIMIT。

所以对于以前的版本u能想出是为此在两个阶段:

第一步

SELECT id FROM mytable ORDER BY id DESC LIMIT n; 

收集ID和使它们成为一个逗号分隔的字符串:

DELETE FROM mytable WHERE id NOT IN (...comma-separated string...);