MySQL 쿼리를 사용하여 행 탐색 및 재귀 트리 생성
문제 설명
In 항목 및 상위 열이 있는 BOM(Bill of Materials) 테이블을 검색해야 합니다. 부모-자식 관계를 표시하는 재귀 트리 구조입니다. 원하는 출력에는 여러 수준의 계층이 포함될 수 있지만 현재는 단일 수준을 가져오거나 모든 레코드를 검색하고 재귀 함수를 사용하여 수동으로 정렬하는 것으로 제한되어 있어 비효율적일 수 있습니다.
솔루션
MySQL 자체는 기본적으로 재귀 트리 탐색을 지원하지 않지만 저장 프로시저를 활용하여 기능을 구현할 수 있습니다. 한 가지 접근 방식은 세 가지 저장 프로시저를 만드는 것입니다.
다음을 사용하여 이러한 저장 프로시저를 호출합니다. 시작 항목 ID를 사용하면 BOM 테이블의 행을 재귀적으로 탐색하여 원하는 트리를 구성할 수 있습니다. 구조.
저장 프로시저 예:
CREATE PROCEDURE GetFamilyTree(IN start_item_id INT) BEGIN # Declare variables DECLARE parent_id INT; DECLARE ancestry VARCHAR(255); DECLARE done TINYINT DEFAULT 0; # Loop through item IDs until done WHILE NOT done DO # Get parent ID CALL GetParentIDByID(start_item_id, parent_id); # If parent ID is null, we're done IF parent_id IS NULL THEN SET done = 1; LEAVE; END IF; # Append parent ID to ancestry SET ancestry = CONCAT(ancestry, ',', parent_id); # Set current item ID to parent ID SET start_item_id = parent_id; END WHILE; # Return ancestry as result SELECT ancestry; END
사용:
항목 ID에서 시작하는 가계도를 검색하려면 1, 저장 프로시저를 호출합니다.
CALL GetFamilyTree(1);
결과는 다음과 같습니다. 항목 1의 상위 항목을 포함하는 쉼표로 구분된 문자열입니다.
위 내용은 MySQL 저장 프로시저가 BOM 테이블의 재귀 트리 탐색을 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!