Heim >Datenbank >MySQL-Tutorial >Wie implementiert man eine rekursive gespeicherte Prozedur in MySQL zur Berechnung der Mengenhierarchie?

Wie implementiert man eine rekursive gespeicherte Prozedur in MySQL zur Berechnung der Mengenhierarchie?

Barbara Streisand
Barbara StreisandOriginal
2024-10-31 19:23:02517Durchsuche

How to Implement a Recursive Stored Procedure in MySQL for Calculating Quantity Hierarchy?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn