2010-10-29 24 views
0

J'ai une table comme ceci:Comment supprimer les enregistrements d'une table après une limite

CREATE TABLE vhist ( id int(10) 
unsigned NOT NULL auto_increment, 
userId varchar(45) NOT NULL, 
mktCode int(10) unsigned NOT NULL, 
insertDate datetime NOT NULL, 
default NULL, PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

Un utilisateur peut avoir plus d'un enregistrement. J'ai besoin d'une instruction SQL qui conservera les 50 enregistrements les plus récents et supprimera n'importe quoi après cette limite. J'ai besoin de cela dans une seule instruction sql.

J'ai essayé mais a échoué

delete from vhist v where v.id not in 
(select v.id from vhist v where 
v.userId=12 order by insertDate desc 
limit 50) 

mais cela a échoué sur MYSQL disant IN ne peut être utilisé avec une limite.

Une aide?

Répondre

0

Vous avez besoin d'une sous-requête, comme ceci:

DELETE FROM vhist WHERE id NOT IN (
    SELECT id FROM (
     SELECT id FROM vhist WHERE userId = 12 ORDER BY insertDate DESC LIMIT 50 
    ) as foo 
);