Utilisez une requête SQL pour supprimer tous les enregistrements à l'exception des N derniers enregistrements
Dans MySQL, il est possible de supprimer tous les enregistrements d'une table à l'exception des N derniers enregistrements triés par ID décroissant. Ceci peut être réalisé en utilisant une seule requête MySQL, bien que ce ne soit pas aussi simple que prévu.
Utilisez simplement une requête comme celle-ci :
delete from table order by id ASC limit ((select count(*) from table ) - N)
échouera car la valeur de la clause LIMIT ne peut pas être spécifiée à l'aide d'une sous-requête. Pour y parvenir, une requête plus complexe est nécessaire :
DELETE FROM `table` WHERE id NOT IN ( SELECT id FROM ( SELECT id FROM `table` ORDER BY id DESC LIMIT N ) foo );
Dans cette requête, utilisez une sous-requête intermédiaire pour sélectionner les ID des N derniers enregistrements. La requête principale utilise ensuite cette sous-requête dans un opérateur NOT IN pour exclure ces enregistrements du processus de suppression. Cette approche nous permet de contourner les limitations liées à l'utilisation de sous-requêtes directement dans la clause LIMIT ou dans la clause FROM de la requête principale.
Il est à noter que la sous-requête intermédiaire est essentielle. Sans cela, nous rencontrerions des erreurs liées au référencement de la table supprimée dans une sous-requête et des limitations imposées par les versions antérieures de MySQL qui ne prenaient pas en charge l'utilisation d'une clause LIMIT dans une sous-requête utilisée dans l'opérateur NOT IN.
En utilisant cette requête, vous pouvez supprimer efficacement tous les enregistrements de la table à l'exception des N derniers enregistrements triés par une colonne spécifique, garantissant ainsi que les dernières données sont conservées.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!