用於計算分層數量的MySQL 遞歸預存程序
目前的任務涉及在MySQL 中建立一個預存程序,該程序基於遞歸計算計算數量表內的父子關係。讓我們深入研究解決方案。
提供的預存程序聲明使用遞歸有效地計算給定節點的總量。它的工作原理如下:
過程聲明:
<code class="mysql">CREATE PROCEDURE calctotal(IN number INT, OUT total INT) BEGIN</code>
這聲明了一個名為calctotal 的儲存過程,它接受一個整數作為輸入,傳回一個整數總計作為計算的數量。
變數初始化:
<code class="mysql">DECLARE parent_ID INT DEFAULT NULL; DECLARE tmptotal INT DEFAULT 0; DECLARE tmptotal2 INT DEFAULT 0;</code>
這些變數用於遞歸過程中保存中間值
檢索父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 和初始數量。
遞歸呼叫處理:
<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,則表示該節點為根節點,因此總數等於其數量。
過程呼叫範例:
<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 變數中,隨後可以檢索該變數。
遞歸流程:
以上是如何使用遞歸預存程序計算 MySQL 中的分層數量?的詳細內容。更多資訊請關注PHP中文網其他相關文章!