MySQL의 중첩 폴더 구조에 대한 재귀 쿼리
각 폴더에 ID가 있는 계층적 폴더 구조를 저장하는 테이블이 있는 시나리오를 생각해 보세요. , 상위 폴더 ID 및 이름. 테이블은 다음과 같이 설계되었습니다.
folders_table ----------------------- id_folder id_folder_parent folder_name
단일 SELECT 쿼리를 사용하여 특정 디렉터리의 모든 하위 디렉터리를 검색하는 것이 과제입니다.
해결책: 데이터베이스 구조 수정
한 가지 접근 방식은 재귀 쿼리를 용이하게 하기 위해 데이터베이스 구조를 수정하는 것입니다. id_folder_parent 열을 통해 간접적인 관계를 저장하는 대신 다음 구조를 사용하는 것이 좋습니다.
folders_table ----------------------- id_folder folder_path folder_name
이 업데이트된 구조에서 폴더_경로 열은 루트 디렉터리부터 시작하여 계층 구조에 있는 각 폴더의 전체 경로를 저장합니다. 이를 통해 재귀를 사용하여 폴더 구조를 통해 효율적으로 탐색할 수 있습니다.
재귀 쿼리
데이터베이스 구조가 수정되면 다음 재귀 쿼리를 사용하여 모든 하위 디렉터리를 검색할 수 있습니다. 특정 디렉터리:
WITH RECURSIVE FolderTraversal AS ( SELECT id_folder, folder_path, folder_name FROM folders_table WHERE id_folder = <directory_id> UNION ALL SELECT t.id_folder, t.folder_path, t.folder_name FROM folders_table AS t JOIN FolderTraversal AS p ON t.folder_path LIKE CONCAT(p.folder_path, '%/') ) SELECT id_folder, folder_path, folder_name FROM FolderTraversal;
위 쿼리에서 폴더_경로 열은 다음 작업에 사용됩니다. 재귀를 정의합니다. 현재 폴더 경로를 다음 폴더 경로에 반복적으로 추가하여 트리 분기를 연결합니다. 지정된 Directory_id에서 쿼리를 시작하면 전체 하위 트리를 재귀적으로 순회합니다.
위 내용은 재귀 쿼리를 사용하여 MySQL에서 특정 디렉터리의 모든 하위 디렉터리를 효율적으로 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!