首頁  >  文章  >  資料庫  >  如何使用遞歸預存程序計算 MySQL 中的分層數量?

如何使用遞歸預存程序計算 MySQL 中的分層數量?

Barbara Streisand
Barbara Streisand原創
2024-11-01 08:16:31783瀏覽

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

用於計算分層數量的MySQL 遞歸預存程序

目前的任務涉及在MySQL 中建立一個預存程序,該程序基於遞歸計算計算數量表內的父子關係。讓我們深入研究解決方案。

提供的預存程序聲明使用遞歸有效地計算給定節點的總量。它的工作原理如下:

  1. 過程聲明:

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

    這聲明了一個名為calctotal 的儲存過程,它接受一個整數作為輸入,傳回一個整數總計作為計算的數量。

  2. 變數初始化:

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

    這些變數用於遞歸過程中保存中間值

  3. 檢索父ID和初始數量:

    <code class="mysql">SELECT parentid FROM test WHERE id = number INTO parent_ID;
    SELECT quantity FROM test WHERE id = number INTO tmptotal;</code>

    這將檢索給定編號的父 ID 和初始數量。
  4. 遞歸呼叫處理:

    <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.如果父節點ID為NULL,則表示該節點為根節點,因此總數等於其數量。

    b.否則,它會使用父級 ID 遞歸呼叫 calctotal 來計算父級的總計。然後,它將父節點的總數乘以目前節點的數量,以獲得目前節點的總數。
  5. 過程呼叫範例:

    <code class="mysql">SET @@GLOBAL.max_sp_recursion_depth = 255;
    SET @@session.max_sp_recursion_depth = 255;
    
    CALL calctotal(6, @total);
    SELECT @total;</code>

    要使用預存程序,您需要使用這些組態設定來設定最大遞歸深度。然後您可以使用適當的號碼呼叫 calctotal。結果儲存在 @total 變數中,隨後可以檢索該變數。
  6. 遞歸流程:

    • 流程開始於計算給定數字的總數。
    • 如果節點是根節點,則其總數等於其數量。
    • 否則,它遞歸地計算父節點的總數。
    • 最後,它將父級的總數乘以自己的數量以獲得節點的總數。

此遞歸預存程序提供了一種計算分層數量的便捷方法基於資料庫表中指定的父子關係。

以上是如何使用遞歸預存程序計算 MySQL 中的分層數量?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn