Maison > base de données > tutoriel mysql > le corps du texte

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

Susan Sarandon
Libérer: 2024-10-25 02:26:30
original
731 Les gens l'ont consulté

## 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;
Copier après la connexion
UPDATE table SET time = 0 WHERE group_id = 1013 and time > 100
Copier après la connexion

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

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

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!

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!