Maison > base de données > tutoriel mysql > Comment calculer la quantité totale dans une arborescence dans MySQL à l'aide d'une procédure stockée récursive ?

Comment calculer la quantité totale dans une arborescence dans MySQL à l'aide d'une procédure stockée récursive ?

Barbara Streisand
Libérer: 2024-11-03 08:02:30
original
815 Les gens l'ont consulté

How to Calculate Total Quantity Up a Tree Structure in MySQL using a Recursive Stored Procedure?

Détermination de la quantité totale à l'aide d'une procédure stockée récursive dans MySQL

Pour répondre au besoin d'une procédure stockée récursive dans MySQL qui calcule la quantité totale Dans une structure arborescente dans une table, vous pouvez utiliser la requête suivante :

DELIMITER $$

CREATE PROCEDURE calctotal(
   IN number INT,
   OUT total INT
)

BEGIN

   DECLARE parent_ID INT DEFAULT NULL ;
   DECLARE tmptotal INT DEFAULT 0;
   DECLARE tmptotal2 INT DEFAULT 0;

   SELECT parentid   FROM test   WHERE id = number INTO parent_ID;   
   SELECT quantity   FROM test   WHERE id = number INTO tmptotal;     

   IF parent_ID IS NULL
    THEN
    SET total = tmptotal;
   ELSE     
    CALL calctotal(parent_ID, tmptotal2);
    SET total = tmptotal2 * tmptotal;   
   END IF;

END$$

DELIMITER ;
Copier après la connexion

Cette procédure stockée initialise les variables pour l'ID parent et les totaux temporaires. Il récupère ensuite les informations nécessaires dans la table « test ». Si l'ID parent est nul, la procédure définit le total sur la quantité actuelle. Sinon, il s'appelle récursivement avec l'ID parent et accumule le total en conséquence.

Pour appeler la procédure, vous devez définir certaines variables de session :

SET @@GLOBAL.max_sp_recursion_depth = 255;
SET @@session.max_sp_recursion_depth = 255; 

CALL calctotal(6, @total);
SELECT @total;
Copier après la connexion

Remplacer le "6" par votre identifiant souhaité vous fournira la quantité totale calculée à partir du nœud racine往上.

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 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