계층적 수량 계산을 위한 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!