Heim > Datenbank > MySQL-Tutorial > Hauptteil

Wie berechnet man hierarchische Größen in MySQL mithilfe einer rekursiven gespeicherten Prozedur?

Barbara Streisand
Freigeben: 2024-11-01 08:16:31
Original
782 Leute haben es durchsucht

How to Calculate Hierarchical Quantities in MySQL Using a Recursive Stored Procedure?

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:

  1. Prozedurdeklaration:

    <code class="mysql">CREATE PROCEDURE calctotal(IN number INT, OUT total INT)
    BEGIN</code>
    Nach dem Login kopieren

    Dies deklariert eine gespeicherte Prozedur namens calctotal, die eine Ganzzahl als Eingabe und verwendet gibt eine ganzzahlige Summe als berechnete Menge zurück.

  2. Variableninitialisierung:

    <code class="mysql">DECLARE parent_ID INT DEFAULT NULL;
    DECLARE tmptotal INT DEFAULT 0;
    DECLARE tmptotal2 INT DEFAULT 0;</code>
    Nach dem Login kopieren

    Diese Variablen werden verwendet, um Zwischenwerte während der Rekursion zu speichern Prozess.

  3. 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>
    Nach dem Login kopieren

    Dadurch werden die Eltern-ID und die Anfangsmenge für die angegebene Nummer abgerufen.

  4. 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>
    Nach dem Login kopieren

    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.

  5. 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>
    Nach dem Login kopieren

    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.

  6. Rekursiver Fluss:

    • Der Vorgang beginnt mit Berechnen der Summe für die gegebene Zahl.
    • Wenn der Knoten ein Wurzelknoten ist, entspricht seine Summe seiner Menge.
    • Andernfalls wird die Summe für den übergeordneten Knoten rekursiv berechnet.
    • Schließlich multipliziert es die Summe des übergeordneten Knotens mit seiner eigenen Menge, um die Summe für den Knoten zu erhalten.

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!