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

Patricia Arquette
Lepaskan: 2024-11-01 07:24:30
asal
706 orang telah melayarinya

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

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

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!

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!