>  기사  >  데이터 베이스  >  재귀 저장 프로시저를 사용하여 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>

    이러한 변수는 재귀 중에 중간 값을 유지하는 데 사용됩니다. process.

  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으로 문의하세요.