2011-08-29 10 views
1

comment je peux supprimer toutes les lignes dans le tableau recentpostsComment supprimer toutes les lignes, sauf 50 derniers

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

i essayé beaucoup semblable à cela, mais ils ne travaillaient. Quelqu'un peut-il me dire comment je peux le faire dans Mysql.

+0

Voulez-vous dire plus tard 5 ou plus tard 50? – gbn

Répondre

3

Que pensez-vous de cela?

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: seul travail (MySQL 5.0.67 et supérieur) comme dans les versions antérieures Ce sont les limites de MySQL.

  • Vous ne pouvez pas supprimer et sélectionner à partir d'une table donnée dans la même requête.
  • MySQL ne prend pas en charge LIMIT dans une sous-requête.

donc pour la version précédente u peut venir avec est de le faire en deux étapes:

première étape

SELECT id FROM mytable ORDER BY id DESC LIMIT n; 

recueillir les id et les transformer en une chaîne séparée par des virgules:

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