Requete qui supprime tout, sauf les 6 derniers ID

WRInaute impliqué
Bonjour,

Je voudrais faire une requête DELETE qui supprime tous les enregistrements d'une table, mais en gardant les 6 derniers ID (Les 6 plus grand ID).

Pouvez vous m'aider ?

Merci
 
WRInaute accro
Le plus simple serait de faire en deux fois :

1. Une requête pour récupérer la liste des identifiants que tu veux garder

2. Ton delete en spécifiant les id à ne pas supprimer
 
WRInaute accro
Code:
DELETE FROM table WHERE id NOT IN (SELECT id FROM table ORDER BY id DESC LIMIT 6)

Pas testé, fais un backup de ta table d'abord :)

Jacques.
 
WRInaute accro
Ah ptet ben. Moi j'utilise postgresql, il n'y a pas ce genre de soucis.

Si ce n'est effectivement pas supporté, si les IDs sont attribués séquentiellement sans trous ce n'est pas très difficile à faire. Sinon il faut effectivement faire ça en deux temps (en fait il y a au moins une méthode sans limit en une seule requête, mais c'est un peu tordu).

Jacques.
 
WRInaute accro
mysql supporte effectivement les ORDER BY et les LIMIT dans les DELETE (c'est non standard), mais a priori uniquement avec un numbre de lignes, pas d'offset (en tous cas dans la doc de la 5.1).

Un truc a essayer:

Code:
DELETE FROM t1 USING table t1,(SELECT id FROM table ORDER BY ID desc OFFSET 6) t2 WHERE t1.id=t2.id

Jacques.
 
Discussions similaires
Haut