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

Barbara Streisand
Lepaskan: 2024-10-31 19:23:02
asal
470 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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

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

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan