Rekursive gespeicherte Prozedur in MySQL zur Berechnung hierarchischer Mengen
Die vorliegende Aufgabe besteht darin, eine gespeicherte Prozedur in MySQL zu erstellen, die die berechnete Menge rekursiv berechnet auf einer Eltern-Kind-Beziehung innerhalb einer Tabelle. Schauen wir uns die Lösung genauer an.
Die bereitgestellte Deklaration der gespeicherten Prozedur berechnet mithilfe der Rekursion effektiv die Gesamtmenge für einen bestimmten Knoten. So funktioniert es:
Prozedurdeklaration:
<code class="mysql">CREATE PROCEDURE calctotal(IN number INT, OUT total INT) BEGIN</code>
Dies deklariert eine gespeicherte Prozedur namens calctotal, die eine Ganzzahl als Eingabe und verwendet gibt eine ganzzahlige Summe als berechnete Menge zurück.
Variableninitialisierung:
<code class="mysql">DECLARE parent_ID INT DEFAULT NULL; DECLARE tmptotal INT DEFAULT 0; DECLARE tmptotal2 INT DEFAULT 0;</code>
Diese Variablen werden verwendet, um Zwischenwerte während der Rekursion zu speichern Prozess.
Eltern-ID und Anfangsmenge abrufen:
<code class="mysql">SELECT parentid FROM test WHERE id = number INTO parent_ID; SELECT quantity FROM test WHERE id = number INTO tmptotal;</code>
Dadurch werden die Eltern-ID und die Anfangsmenge für die angegebene Nummer abgerufen.
Rekursive Anrufbearbeitung:
<code class="mysql">IF parent_ID IS NULL THEN SET total = tmptotal; -- The node is a root node, set total to its quantity. ELSE CALL calctotal(parent_ID, tmptotal2); SET total = tmptotal2 * tmptotal; -- Total for current node is product of parent's total and current node's quantity. END IF;</code>
a. Wenn die übergeordnete ID NULL ist, bedeutet dies, dass der Knoten ein Wurzelknoten ist, sodass die Summe seiner Menge entspricht.
b. Andernfalls wird calctotal rekursiv mit der übergeordneten ID aufgerufen, um die Gesamtsumme für das übergeordnete Element zu berechnen. Dann multipliziert es die Summe dieses übergeordneten Knotens mit der Menge des aktuellen Knotens, um die Summe für den aktuellen Knoten zu erhalten.
Beispiel für einen Prozeduraufruf:
<code class="mysql">SET @@GLOBAL.max_sp_recursion_depth = 255; SET @@session.max_sp_recursion_depth = 255; CALL calctotal(6, @total); SELECT @total;</code>
Um die gespeicherte Prozedur verwenden zu können, müssen Sie mithilfe dieser Konfigurationseinstellungen die maximale Rekursionstiefe festlegen. Anschließend können Sie calctotal mit der entsprechenden Nummer anrufen. Das Ergebnis wird in der Variable @total gespeichert, die anschließend abgerufen werden kann.
Rekursiver Fluss:
Diese rekursive gespeicherte Prozedur bietet eine praktische Möglichkeit, hierarchische Mengen zu berechnen basierend auf den angegebenen Eltern-Kind-Beziehungen in der Datenbanktabelle.
Das obige ist der detaillierte Inhalt vonWie berechnet man hierarchische Größen in MySQL mithilfe einer rekursiven gespeicherten Prozedur?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!