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

Barbara Streisand
Lepaskan: 2024-11-01 08:16:31
asal
782 orang telah melayarinya

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

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:

  1. Pengisytiharan Prosedur:

    <code class="mysql">CREATE PROCEDURE calctotal(IN number INT, OUT total INT)
    BEGIN</code>
    Salin selepas log masuk

    Ini mengisytiharkan prosedur tersimpan bernama calctotal yang mengambil nombor integer sebagai input dan mengembalikan jumlah integer sebagai kuantiti yang dikira.

  2. Permulaan Pembolehubah:

    <code class="mysql">DECLARE parent_ID INT DEFAULT NULL;
    DECLARE tmptotal INT DEFAULT 0;
    DECLARE tmptotal2 INT DEFAULT 0;</code>
    Salin selepas log masuk

    Pembolehubah ini digunakan untuk memegang nilai perantaraan semasa rekursif proses.

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

    Ini mendapatkan semula ID induk dan kuantiti awal untuk nombor yang diberikan.

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

    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.

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

    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.

  6. Aliran Rekursif:

    • Prosedur bermula dengan mengira jumlah untuk nombor yang diberikan.
    • Jika nod ialah nod punca, jumlahnya adalah sama dengan kuantitinya.
    • Jika tidak, ia mengira jumlah untuk nod induk secara rekursif.
    • Akhir sekali, ia mendarabkan jumlah induk dengan kuantiti sendiri untuk mendapatkan jumlah nod.

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!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!