Instruction MySQL DELETE avec limite
Un utilisateur rencontre une erreur en essayant de supprimer des lignes d'une table à l'aide de la requête suivante :
DELETE FROM `chat_messages` ORDER BY `timestamp` DESC LIMIT 20, 50;
Le message d'erreur indique que la syntaxe est incorrecte.
Explication
L'erreur se produit car l'instruction DELETE utilisée ici inclut un décalage dans le LIMIT clause. Ceci n'est pas autorisé dans MySQL. La clause LIMIT ne peut spécifier que le nombre de lignes à supprimer.
Solution
Pour supprimer une plage spécifiée de lignes d'une table, vous ne pouvez pas utiliser la fonction de décalage dans la clause LIMIT. Au lieu de cela, vous devez utiliser une sous-requête pour sélectionner les lignes à supprimer, puis les supprimer à l'aide de leurs valeurs de clé primaire.
La requête suivante peut être utilisée dans ce scénario :
DELETE FROM `chat_messages` WHERE `id` IN ( SELECT `id` FROM ( SELECT `id` FROM `chat_messages` ORDER BY `timestamp` DESC LIMIT 20, 50 ) AS `x` )
Cette requête utilise une double imbrication pour sélectionner les lignes à supprimer et contourner les limitations de MySQL.
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!