Rekursive gespeicherte Prozedur zur Berechnung der Mengenhierarchie
In MySQL ist die Erstellung einer rekursiven gespeicherten Prozedur zur Berechnung von Mengen für verschachtelte hierarchische Strukturen eine Herausforderung können mit einem sorgfältig ausgearbeiteten Verfahren überwunden werden. Betrachten Sie die angegebene Tabelle, in der jede Zeile einen Artikel mit einer zugehörigen Menge und einem potenziellen übergeordneten Element darstellt.
Rekursive gespeicherte Prozedur
Um diese baumartige Struktur rekursiv zu durchlaufen und zu berechnen Für die Gesamtmenge kann die folgende gespeicherte Prozedur implementiert werden:
<code class="mysql">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 ;</code>
Prozedurausführung
Um die Rekursion zu ermöglichen, ist es wichtig, die MySQL-Einstellungen anzupassen:
<code class="mysql">SET @@GLOBAL.max_sp_recursion_depth = 255; SET @@session.max_sp_recursion_depth = 255;</code>
Sobald diese Einstellungen konfiguriert sind, kann die gespeicherte Prozedur wie folgt aufgerufen werden:
<code class="mysql">CALL calctotal(6, @total); SELECT @total;</code>
Beispiel für eine rekursive Berechnung
Für die angegebenen Beispieldaten: Wenn Element 6 ein untergeordnetes Element von Element 5 ist, das wiederum ein untergeordnetes Element von Element 3 ist, usw., berechnet die gespeicherte Prozedur die Gesamtmenge rekursiv wie folgt:
4 * 2 * 10 * 3 = 240
Daher ist das Ergebnis des Aufrufs von Prozedur mit Nummer = 6 wird 240 sein.
Das obige ist der detaillierte Inhalt vonWie implementiert man eine rekursive gespeicherte Prozedur in MySQL zur Berechnung der Mengenhierarchie?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!