>데이터 베이스 >MySQL 튜토리얼 >저장 프로시저가 MySQL에서 계층적 BOM 트리를 어떻게 효율적으로 탐색할 수 있습니까?

저장 프로시저가 MySQL에서 계층적 BOM 트리를 어떻게 효율적으로 탐색할 수 있습니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-06 14:39:15273검색

How Can Stored Procedures Efficiently Traverse a Hierarchical BOM Tree in MySQL?

트리 순회를 위한 MySQL 재귀 쿼리

문제:

다음과 같은 BOM(재료 명세서) 테이블이 있다고 가정합니다. 항목 및 해당 상위 ID. 목표는 트리 구조 형태로 항목의 계층적 표현을 검색하는 것입니다. 일반적인 단일 수준 쿼리나 재귀 함수를 사용하는 것은 비효율적일 수 있습니다.

해결책:

MySQL의 SQL 언어는 기본적으로 재귀 쿼리를 지원하지 않습니다. 이러한 제한을 극복하기 위해 사용자 정의 저장 프로시저(SP)를 생성하여 트리 순회 기능을 구현할 수 있습니다.

제안 SP:

다음 SP를 사용하여 트리 순회 기능을 구현할 수 있습니다. BOM tree:

  1. GetParentIDByID: 지정된 항목의 상위 ID를 찾습니다.
  2. GetAncestry: 항목의 조상 계보를 검색합니다. 지정된 level.
  3. GetFamilyTree: 지정된 루트 항목에서 시작하여 전체 BOM 트리의 계층적 표현을 생성합니다.

사용법:

SP를 사용하려면 다음을 따르세요. 단계:

  1. 제공된 SQL 코드를 사용하여 MySQL 데이터베이스에 SP를 생성합니다.
  2. 루트 항목 ID를 매개변수로 사용하여 GetFamilyTree SP를 호출합니다.
  3. SP는 다음의 계층적 표현을 반환합니다. tree.

예:

예를 들어 다음 데이터가 포함된 BOM 테이블이 있는 경우:

+----+------+
| item | parent |
+----+------+
| 1  | 0    |
| 2  | 1    |
| 3  | 1    |
| 4  | 3    |
| 76 | 3    |
+----+------+

GetFamilyTree 호출 (1)은 다음 계층 구조를 반환합니다 표현:

[
  {
    "item": 1,
    "children": [
      {
        "item": 2,
        "children": []
      },
      {
        "item": 3,
        "children": [
          {
            "item": 4,
            "children": []
          },
          {
            "item": 76,
            "children": []
          }
        ]
      }
    ]
  }
]

이 표현은 트리의 모든 하위 분기를 제공하므로 항목 관계를 효율적으로 검색할 수 있습니다.

위 내용은 저장 프로시저가 MySQL에서 계층적 BOM 트리를 어떻게 효율적으로 탐색할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.