Procédure stockée récursive pour le calcul de la hiérarchie des quantités
Dans des situations comme celle présentée, où des calculs hiérarchiques sont requis, une procédure stockée récursive dans MySQL peut fournir une solution efficace.
Pour la table donnée, où la colonne quantité représente la quantité d'un article et la colonne parent_id indique son article parent, une procédure stockée peut être conçue pour calculer de manière récursive la quantité totale pour un élément donné, en considérant tous ses ancêtres dans la hiérarchie.
Déclaration de procédure stockée
La définition de procédure stockée MySQL suivante permet un appel récursif et calcule la quantité totale :
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 ;
Dans cette procédure stockée, le paramètre numérique représente l'ID de l'article pour lequel la quantité totale doit être calculée, et le paramètre de sortie total contient le résultat calculé.
Appel de la procédure stockée
Pour utiliser la procédure stockée, il est crucial de définir les variables de session suivantes pour la profondeur de récursion :
SET @@GLOBAL.max_sp_recursion_depth = 255; SET @@session.max_sp_recursion_depth = 255;
Après avoir défini ces variables, la procédure stockée peut être invoqué à l'aide de la déclaration suivante :
CALL calctotal(6, @total); SELECT @total;
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!