MySQL의 단일 쿼리 트리 구조 쿼리
SQL에서 트리 구조는 ID, 데이터 및 열이 있는 테이블에 저장되는 경우가 많습니다. 부모 아이디. 특정 행의 모든 하위 항목 또는 상위 항목을 검색하는 것은 어려울 수 있으며, 특히 잠재적으로 알 수 없는 깊이를 고려하면 더욱 그렇습니다.
하위 항목 쿼리
특정 행의 모든 하위 항목을 검색하려면, Modified Preorder Tree Traversal이라는 기술을 사용할 수 있습니다. Joe Celko가 "Smarties를 위한 SQL의 트리 및 계층"에서 설명한 대로 이 접근 방식에는 다음 구조를 사용하여 재귀 공통 테이블 표현식(CTE)을 생성하는 작업이 포함됩니다.
WITH RECURSIVE Descendants AS ( SELECT id, data, parent_id FROM tree_table WHERE id = <starting_row_id> UNION ALL SELECT t.id, t.data, t.parent_id FROM Descendants AS T JOIN tree_table t ON t.parent_id = T.id ) SELECT * FROM Descendants;
이 CTE는 다음에 대한 모든 하위 행을 재귀적으로 식별합니다. 지정된 시작 행을 사용하여 리프 노드에 도달할 때까지 계층 구조를 계속 진행합니다.
쿼리 상위 항목
특정 행의 모든 상위 항목을 검색하려면 약간 수정하여 유사한 접근 방식을 사용할 수 있습니다.
WITH RECURSIVE Ancestors AS ( SELECT id, data, parent_id FROM tree_table WHERE id = <starting_row_id> UNION ALL SELECT t.id, t.data, t.parent_id FROM Ancestors AS T JOIN tree_table t ON t.id = T.parent_id ) SELECT * FROM Ancestors;
이 CTE는 지정된 시작 항목에 대한 모든 상위 행을 재귀적으로 식별합니다. 행을 거쳐 루트 노드에 도달할 때까지 계층 구조를 따라 계속 위쪽으로 이동합니다.
예 구현
PHP에서 이러한 쿼리의 실제 예는 다음에서 찾을 수 있습니다: http://www.sitepoint.com/article/hierarchical-data-database/2/
위 내용은 MySQL 트리 구조에서 하위 항목과 상위 항목을 효율적으로 쿼리하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!