Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Melaksanakan Prosedur Tersimpan Rekursif dalam MySQL untuk Mengira Hierarki Kuantiti?

Bagaimana untuk Melaksanakan Prosedur Tersimpan Rekursif dalam MySQL untuk Mengira Hierarki Kuantiti?

Barbara Streisand
Barbara Streisandasal
2024-10-31 19:23:02478semak imbas

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

Prosedur Tersimpan Rekursif untuk Mengira Hierarki Kuantiti

Dalam MySQL, mencipta prosedur tersimpan rekursif untuk mengira kuantiti bagi struktur hierarki bersarang merupakan satu cabaran yang boleh diatasi dengan menggunakan prosedur yang dibuat dengan teliti. Pertimbangkan jadual yang diberikan, di mana setiap baris mewakili item dengan kuantiti yang berkaitan dan potensi induk.

Prosedur Tersimpan Rekursif

Untuk melintasi struktur seperti pokok ini secara rekursif dan mengira jumlah kuantiti, prosedur tersimpan berikut boleh dilaksanakan:

<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>

Pelaksanaan Prosedur

Untuk mendayakan rekursi, adalah penting untuk melaraskan tetapan MySQL:

<code class="mysql">SET @@GLOBAL.max_sp_recursion_depth = 255;
SET @@session.max_sp_recursion_depth = 255;</code>

Setelah tetapan ini dikonfigurasikan, prosedur tersimpan boleh digunakan seperti ini:

<code class="mysql">CALL calctotal(6, @total);
SELECT @total;</code>

Contoh Pengiraan Rekursif

Untuk data sampel yang diberikan, di mana item 6 adalah anak item 5, iaitu anak item 3, dan seterusnya, prosedur tersimpan akan mengira secara rekursif jumlah kuantiti seperti berikut:

4 * 2 * 10 * 3 = 240

Oleh itu, hasil panggilan prosedur dengan nombor = 6 akan menjadi 240.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Prosedur Tersimpan Rekursif dalam MySQL untuk Mengira Hierarki Kuantiti?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn