Maison  >  Article  >  base de données  >  ## Comment récupérer et mettre à jour des lignes MySQL en une seule opération sans sous-requêtes ?

## Comment récupérer et mettre à jour des lignes MySQL en une seule opération sans sous-requêtes ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-25 02:26:30732parcourir

## How to Retrieve and Update MySQL Rows in a Single Operation Without Subqueries?

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 :

  • Évite les allers-retours réseau inutiles en combinant plusieurs opérations en un seul appel.
  • Simplifie la structure du code en éliminant le besoin de requêtes distinctes.
  • Améliore les performances en réduisant la charge de la base de donné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!

Déclaration:
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