집 >데이터 베이스 >MySQL 튜토리얼 >재귀 저장 프로시저를 사용하여 MySQL에서 계층적 수량을 계산하는 방법은 무엇입니까?
계층적 수량 계산을 위한 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>
이러한 변수는 재귀 중에 중간 값을 유지하는 데 사용됩니다. process.
상위 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이면 해당 노드가 루트 노드라는 의미이므로 합계는 해당 수량과 같습니다.
b. 그렇지 않으면 상위 ID를 사용하여 calctotal을 재귀적으로 호출하여 상위 항목의 합계를 계산합니다. 그런 다음 이 상위 노드의 총계에 현재 노드의 수량을 곱하여 현재 노드의 총계를 구합니다.
절차 호출 예:
<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!