Maison > base de données > tutoriel mysql > Comment puis-je mettre à jour plusieurs lignes MySQL avec un décalage à l'aide de LIMIT et ORDER BY ?

Comment puis-je mettre à jour plusieurs lignes MySQL avec un décalage à l'aide de LIMIT et ORDER BY ?

Barbara Streisand
Libérer: 2025-01-01 02:11:11
original
639 Les gens l'ont consulté

How Can I Update Multiple MySQL Rows with an Offset Using LIMIT and ORDER BY?

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;
Copier après la connexion

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
 );
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal