Rumah  >  Artikel  >  pangkalan data  >  Bagaimanakah Anda Boleh Menggunakan Prosedur Tersimpan Rekursif untuk Mengira Kuantiti Dikira dalam MySQL?

Bagaimanakah Anda Boleh Menggunakan Prosedur Tersimpan Rekursif untuk Mengira Kuantiti Dikira dalam MySQL?

Patricia Arquette
Patricia Arquetteasal
2024-11-01 07:24:30707semak imbas

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

Rekursi Prosedur Tersimpan untuk Mengira Kuantiti Terkira

Mencipta prosedur tersimpan rekursif dalam MySQL untuk menentukan kuantiti terkira item tertentu memerlukan pemahaman struktur jadual dan logik rekursif.

Latar Belakang Masalah

Memandangkan jadual dengan lajur 'id', 'parent_id' dan 'kuantiti', matlamatnya adalah untuk mengira jumlah kuantiti item dengan secara rekursif melalui hubungan ibu bapa-anaknya. Sebagai contoh, item 6 mempunyai kuantiti yang dikira sebanyak 240 kerana ibu bapanya ialah 5 (kuantiti 4), 3 (kuantiti 2), dan 2 (kuantiti 10).

Penyelesaian: Prosedur Tersimpan Rekursif

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

Prosedur Invocation

Untuk memanggil prosedur yang disimpan dan mendapatkan kuantiti yang dikira untuk item 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>

Pecahan Prosedur

  • Parameter Input dan Output: Nombor IN menentukan item permulaan, dan jumlah OUT mengembalikan kuantiti yang dikira.
  • Rekursi Logik: ID induk dan kuantiti untuk item yang diberikan diambil dan disimpan dalam parent_ID dan tmptotal. Jika tiada induk (iaitu, item berada di akar), jumlah ditetapkan kepada tmptotal. Jika tidak, panggilan rekursif dibuat ke calctotal dengan parent_ID sebagai input, dan hasilnya disimpan dalam tmptotal2. Jumlah yang dikira kemudiannya dikira sebagai jumlah = tmptotal2 * tmptotal.
  • Invokasi Prosedur: Sebelum memanggil prosedur, kedalaman rekursi maksimum mesti dilaraskan untuk mengelakkan ralat akibat pengulangan yang berlebihan. Panggilan sebenar mengambil 6 sebagai input dan jumlah yang dikira disimpan dalam pembolehubah @total, yang boleh diambil menggunakan SELECT @total.

Atas ialah kandungan terperinci Bagaimanakah Anda Boleh Menggunakan Prosedur Tersimpan Rekursif untuk Mengira Kuantiti Dikira dalam MySQL?. 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