首頁  >  文章  >  資料庫  >  如何在 MySQL 中使用遞歸預存程序來計算運算量?

如何在 MySQL 中使用遞歸預存程序來計算運算量?

Patricia Arquette
Patricia Arquette原創
2024-11-01 07:24:30707瀏覽

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

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

在 MySQL 中建立遞歸預存程序來決定給定項目的計算數量需要了解表結構和遞歸邏輯。

問題背景

給定一個包含「id」、「parent_id」和「數量」列的表,目標是透過以下方式計​​算商品的總數量遞歸遍歷其父子關係。例如,第 6 項的計算數量為 240,因為其父項為 5(數量 4)、3(數量 2)和 2(數量 10)。

解決方案:遞歸預存程序

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

過程呼叫

呼叫儲存程序並取得第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>

過程分解

  • 輸入與輸出參數: IN number 指定起始項,OUT Total 傳回計算的數量。
  • 遞歸邏輯: 檢索給定商品的父 ID 和數量並將其儲存在 Parent_ID 和 tmptotal 中。如果沒有父項(即該項位於根),則總計設定為 tmptotal。否則,以parent_ID作為輸入對calctotal進行遞歸調用,並將結果儲存在tmptotal2中。然後計算的總數為:total = tmptotal2 * tmptotal.
  • 過程呼叫: 在呼叫過程之前,必須調整最大遞歸深度,以避免因過度遞歸而產生錯誤。實際呼叫以 6 作為輸入,計算出的總計儲存在變數 @total 中,可以使用 SELECT @total 檢索該變數。

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

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