> 데이터 베이스 > MySQL 튜토리얼 > 재귀 쿼리를 사용하여 MySQL에서 특정 디렉터리의 모든 하위 디렉터리를 효율적으로 검색하는 방법은 무엇입니까?

재귀 쿼리를 사용하여 MySQL에서 특정 디렉터리의 모든 하위 디렉터리를 효율적으로 검색하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2025-01-03 22:28:44
원래의
778명이 탐색했습니다.

How to Efficiently Retrieve All Subdirectories of a Specific Directory in MySQL Using Recursive Queries?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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