Mise à jour de plusieurs lignes à l'aide de LIMIT dans MySQL
Lors de la tentative de mise à jour d'un ensemble de lignes à l'aide de la clause LIMIT, les développeurs peuvent rencontrer des erreurs si le la requête n'est pas structurée correctement. Cet article explore un tel problème et propose une solution alternative.
Requête et erreur d'origine :
Considérez la requête SQL suivante :
UPDATE messages SET test_read = 1 WHERE userid='xyz' ORDER BY date_added DESC LIMIT 5, 5;
Cette requête tente de mettre à jour 5 lignes à partir de la 6ème ligne par ordre décroissant de la colonne date_added. Cependant, MySQL signalera une erreur lors de cette opération.
Raison de l'erreur :
L'erreur se produit car la clause LIMIT ne peut pas être utilisée conjointement avec une clause ORDER BY. lorsque vous tentez de mettre à jour plusieurs lignes. La clause LIMIT limite le nombre de lignes à renvoyer, tandis que la clause ORDER BY détermine l'ordre dans lequel les lignes sont sélectionnées.
Solution alternative :
Pour mettre à jour plusieurs lignes en utilisant une approche de type LIMIT, vous pouvez utiliser la solution de contournement suivante :
UPDATE messages SET test_read=1 WHERE id IN ( SELECT id FROM ( SELECT id FROM messages ORDER BY date_added DESC LIMIT 5, 5 ) tmp );
Cette requête exécute d'abord une sous-requête pour sélectionner les ID des lignes à mettre à jour. Ensuite, la requête principale utilise ces ID pour filtrer les lignes qui recevront la mise à jour.
Explication de la solution :
La sous-requête imbriquée sélectionne les ID des 5 lignes à partir de la 6ème ligne par ordre décroissant de la colonne date_added. La requête externe utilise ensuite ces identifiants pour identifier et mettre à jour les lignes correspondantes.
Conclusion :
Bien que la clause LIMIT ne puisse pas être directement utilisée pour mettre à jour plusieurs lignes à l'aide d'un ORDER Clause BY, la solution alternative proposée dans cet article permet aux développeurs d'obtenir le résultat souhaité. En utilisant cette approche, les développeurs peuvent spécifier le point de départ et le nombre de lignes à mettre à jour, garantissant ainsi que l'opération cible avec précision les lignes souhaité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!