Heim > Datenbank > MySQL-Tutorial > Hauptteil

Wie können Sie rekursive gespeicherte Prozeduren verwenden, um berechnete Mengen in MySQL zu berechnen?

Patricia Arquette
Freigeben: 2024-11-01 07:24:30
Original
706 Leute haben es durchsucht

How Can You Use Recursive Stored Procedures to Calculate Computed Quantities in MySQL?

Rekursion gespeicherter Prozeduren zur Berechnung berechneter Mengen

Das Erstellen einer rekursiven gespeicherten Prozedur in MySQL zur Bestimmung der berechneten Menge eines bestimmten Artikels erfordert das Verständnis der Tabellenstruktur und der rekursiven Logik.

Problemhintergrund

Gegeben eine Tabelle mit den Spalten „id“, „parent_id“ und „quantity“, besteht das Ziel darin, die Gesamtmenge eines Artikels zu berechnen rekursives Durchlaufen seiner Eltern-Kind-Beziehungen. Zum Beispiel hat Element 6 eine berechnete Menge von 240, weil seine Eltern 5 (Menge 4), 3 (Menge 2) und 2 (Menge 10) sind.

Lösung: Rekursive gespeicherte Prozedur

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

Prozeduraufruf

So rufen Sie die gespeicherte Prozedur auf und erhalten die berechnete Menge für Element 6:

<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

Verfahrensaufschlüsselung

  • Eingabe- und Ausgabeparameter:IN-Nummer gibt das Startelement an, und OUT-Gesamt gibt die berechnete Menge zurück.
  • Rekursion Logik: Die übergeordnete ID und Menge für den angegebenen Artikel werden abgerufen und in parent_ID und tmptotal gespeichert. Wenn kein übergeordnetes Element vorhanden ist (d. h. das Element befindet sich im Stammverzeichnis), wird „total“ auf „tmptotal“ gesetzt. Andernfalls erfolgt ein rekursiver Aufruf von calctotal mit parent_ID als Eingabe und das Ergebnis wird in tmptotal2 gespeichert. Die berechnete Summe wird dann als total = tmptotal2 * tmptotal berechnet.
  • Prozeduraufruf: Vor dem Aufruf der Prozedur muss die maximale Rekursionstiefe angepasst werden, um einen Fehler aufgrund übermäßiger Rekursion zu vermeiden. Der eigentliche Aufruf benötigt 6 als Eingabe und die berechnete Summe wird in der Variablen @total gespeichert, die mit SELECT @total abgerufen werden kann.

Das obige ist der detaillierte Inhalt vonWie können Sie rekursive gespeicherte Prozeduren verwenden, um berechnete Mengen in MySQL zu berechnen?. 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!