Maison >base de données >tutoriel mysql >## Comment récupérer et mettre à jour des lignes MySQL en une seule opération sans sous-requêtes ?
Requête pour récupérer et mettre à jour des lignes MySQL en une seule opération
La combinaison des requêtes SELECT et UPDATE en une seule opération peut améliorer l'efficacité et réduire le code complexité. Cet article explore une solution pour atteindre cet objectif sans utiliser de sous-requêtes.
Énigme
Un utilisateur a demandé de l'aide pour combiner les requêtes MySQL suivantes :
SELECT * FROM table WHERE group_id = 1013 and time > 100;
UPDATE table SET time = 0 WHERE group_id = 1013 and time > 100
L'objectif principal était de récupérer les lignes souhaitées tout en mettant simultanément à jour leur champ "heure" à zéro.
Solution ingénieuse
La solution consiste à utiliser des procédures pour obtenir le résultat souhaité. Les procédures stockées encapsulent une série d'instructions SQL et peuvent être exécutées comme une unité.
La procédure suivante nommée "update_and_retrieve" accomplit la tâche :
<code class="mysql">CREATE PROCEDURE update_and_retrieve(IN group_id INT, IN time INT) BEGIN DECLARE updated_ids VARCHAR(255); UPDATE table SET time = 0 WHERE group_id = group_id AND time > time; SET updated_ids = (SELECT GROUP_CONCAT(fooid) FROM table WHERE group_id = group_id AND time > time); SELECT * FROM table WHERE fooid IN (updated_ids); END;</code>
Invocation de procédure
Pour appeler la procédure stockée, exécutez simplement l'instruction suivante :
<code class="mysql">CALL update_and_retrieve(1013, 100);</code>
Cela mettra à jour le champ "heure" à zéro pour les lignes qualificatives, puis récupérera et affichera ces lignes mises à jour.
Avantages
Cette approche offre plusieurs avantages :
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!