> 데이터 베이스 > MySQL 튜토리얼 > MySQL의 깊이 우선 검색은 어떻게 계층 구조에서 노드의 모든 조상을 효과적으로 검색할 수 있습니까?

MySQL의 깊이 우선 검색은 어떻게 계층 구조에서 노드의 모든 조상을 효과적으로 검색할 수 있습니까?

Barbara Streisand
풀어 주다: 2024-12-08 10:27:15
원래의
157명이 탐색했습니다.

How Can MySQL's Depth-First Search Effectively Retrieve All Ancestors of a Node in a Hierarchical Structure?

MySQL의 계층적 쿼리: 깊이 우선 검색으로 상위 항목 탐색

계층적 데이터 내에서 상위 관계를 확인하는 것은 데이터베이스 관리에서 일반적인 작업입니다. MySQL에서 계층적 쿼리를 사용하면 중첩 구조에서 데이터를 효과적으로 탐색하고 검색할 수 있습니다.

계층적 상위-하위를 나타내는 두 개의 열 'a'와 'b'가 있는 'mytable'이라는 테이블이 있다고 가정해 보겠습니다. 관계:

| a | b |
----------
| 1 | 2 |
| 2 | 3 |
| 3 | 4 |
| 4 | 5 |
| 3 | 6 |
| 4 | 7 |
로그인 후 복사

특정 노드의 모든 조상을 검색하려는 시나리오를 고려해 보세요. 예를 들어 모든 부모, 조부모, 등이 있습니다.

profondità의 l'algoritmo di ricerca 활용 솔루션:

MySQL은 깊이 우선 검색(DFS)을 사용하여 계층적 쿼리 솔루션을 제공합니다. ) 접근하다. 다음은 이를 수행하는 쿼리입니다.

SELECT  @id :=
        (
        SELECT  senderid
        FROM    mytable
        WHERE   receiverid = @id
        ) AS person
FROM    (
        SELECT  @id := 5
        ) vars
STRAIGHT_JOIN
        mytable
WHERE   @id IS NOT NULL
로그인 후 복사

분석:

  • 중첩 쿼리는 '@id' 변수를 노드(5)로 초기화합니다.
  • 외부 쿼리는 현재 항목의 직접 상위 항목을 반복적으로 검색합니다. 'mytable'의 'senderid' 필드를 사용하는 '@id'.
  • 'STRAIGHT_JOIN'은 쿼리가 상위-하위 관계를 우회할 수 있는 최적화 없이 계층 구조를 따르도록 보장합니다.
  • '@id' 변수는 각 반복마다 상위 노드의 'senderid'로 업데이트되며 더 이상 변수가 없을 때까지 프로세스가 계속됩니다. parent.

이 쿼리를 실행하면 노드 5의 상위 목록인 4, 3, 2, 1이 검색됩니다. 이 방법은 DFS 접근 방식을 사용하여 계층 구조를 효과적으로 탐색하므로 다음을 수행할 수 있습니다. MySQL 데이터베이스 내에서 복잡한 상위-하위 구조를 탐색합니다.

위 내용은 MySQL의 깊이 우선 검색은 어떻게 계층 구조에서 노드의 모든 조상을 효과적으로 검색할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿