Rumah > Artikel > pangkalan data > Bagaimana untuk Mengira Kuantiti Hierarki dalam MySQL Menggunakan Prosedur Tersimpan Rekursif?
Prosedur Tersimpan Rekursif MySQL untuk Pengkomputeran Kuantiti Hierarki
Tugas di tangan melibatkan mencipta prosedur tersimpan dalam MySQL yang mengira secara rekursif kuantiti yang dikira berdasarkan kuantiti pada hubungan ibu bapa-anak dalam jadual. Mari kita mendalami penyelesaiannya.
Pengisytiharan prosedur tersimpan yang disediakan secara berkesan mengira jumlah kuantiti untuk nod tertentu menggunakan rekursi. Begini caranya:
Pengisytiharan Prosedur:
<code class="mysql">CREATE PROCEDURE calctotal(IN number INT, OUT total INT) BEGIN</code>
Ini mengisytiharkan prosedur tersimpan bernama calctotal yang mengambil nombor integer sebagai input dan mengembalikan jumlah integer sebagai kuantiti yang dikira.
Permulaan Pembolehubah:
<code class="mysql">DECLARE parent_ID INT DEFAULT NULL; DECLARE tmptotal INT DEFAULT 0; DECLARE tmptotal2 INT DEFAULT 0;</code>
Pembolehubah ini digunakan untuk memegang nilai perantaraan semasa rekursif proses.
Dapatkan ID Ibu Bapa dan Kuantiti Awal:
<code class="mysql">SELECT parentid FROM test WHERE id = number INTO parent_ID; SELECT quantity FROM test WHERE id = number INTO tmptotal;</code>
Ini mendapatkan semula ID induk dan kuantiti awal untuk nombor yang diberikan.
Pengendalian Panggilan Rekursif:
<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>
a. Jika ID induk ialah NULL, ia bermakna nod ialah nod akar, jadi jumlahnya adalah sama dengan kuantitinya.
b. Jika tidak, ia secara rekursif memanggil calctotal dengan ID induk untuk mengira jumlah induk. Kemudian, ia mendarabkan jumlah induk ini dengan kuantiti nod semasa untuk mendapatkan jumlah nod semasa.
Contoh Panggilan Prosedur:
<code class="mysql">SET @@GLOBAL.max_sp_recursion_depth = 255; SET @@session.max_sp_recursion_depth = 255; CALL calctotal(6, @total); SELECT @total;</code>
Untuk menggunakan prosedur tersimpan, anda perlu menetapkan kedalaman rekursi maksimum menggunakan tetapan konfigurasi ini. Anda kemudian boleh menghubungi calctotal dengan nombor yang sesuai. Hasilnya disimpan dalam pembolehubah @total, yang boleh diambil kemudiannya.
Aliran Rekursif:
Prosedur tersimpan rekursif ini menyediakan cara yang mudah untuk mengira kuantiti hierarki berdasarkan perhubungan ibu bapa-anak yang ditentukan dalam jadual pangkalan data.
Atas ialah kandungan terperinci Bagaimana untuk Mengira Kuantiti Hierarki dalam MySQL Menggunakan Prosedur Tersimpan Rekursif?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!