중첩 폴더에 대한 재귀 쿼리
여러 수준의 중첩이 포함된 모든 하위 폴더와 하위 폴더를 가져오는 것은 MySQL 쿼리에 대한 과제를 제시합니다. 다양한 접근 방식이 있지만 이 기사에서는 효과적이고 포괄적인 솔루션에 중점을 둘 것입니다.
특정 상위 항목의 모든 하위 폴더를 검색하려면 단일 문 내에서 중첩 계산이 가능한 재귀 쿼리를 활용할 수 있습니다. 이 방법에는 각 폴더의 ID가 다음 반복의 매개변수로 사용되어 각 주기에 따라 검색 깊이가 확장되는 반복 프로세스가 포함됩니다.
이 시나리오를 고려하십시오. idFolder(auto) 열이 있는 Folder라는 데이터베이스 테이블이 있다고 가정해 보겠습니다. -증가된 기본 키), FolderName 및 idFolderParent(Folder.idFolder의 외래 키)를 다음 데이터로 채웁니다.
idFolder | FolderName | idFolderParent |
---|---|---|
1 | ADoc | NULL |
2 | ADoc1 | 1 |
3 | ADoc2 | 2 |
4 | ADoc3 | 3 |
5 | ADoc4 | 4 |
6 | ADoc5 | 5 |
7 | ADoc6 | 4 |
이 구조를 사용하면 중첩된 폴더 계층을 생성할 수 있습니다. 예를 들어, ADoc(idFolder=1)의 모든 하위 폴더를 쿼리하는 경우 직계 하위 폴더(ADoc1, ADoc2)뿐만 아니라 그 아래의 모든 하위 폴더(ADoc3, ADoc4, ADoc5, ADoc6, ADoc7)도 검색할 것으로 예상됩니다. .
다음 SQL 쿼리는 재귀 반복을 사용하여 이를 달성합니다.
<code class="sql">WITH RECURSIVE FolderHierarchy AS ( SELECT idFolder, FolderName, idFolderParent FROM Folder WHERE idFolder = 1 UNION ALL SELECT f.idFolder, f.FolderName, f.idFolderParent FROM FolderHierarchy AS h JOIN Folder AS f ON h.idFolderParent = f.idFolderParent ) SELECT idFolder, FolderName FROM FolderHierarchy;</code>
이 쿼리는 처음에는 루트 폴더(ADoc)를 선택한 다음 재귀적으로 선택하는 FolderHierarchy라는 공통 테이블 표현식(CTE)을 사용합니다. 하위 폴더를 계층 구조에 결합합니다. 하위 폴더가 더 이상 남지 않을 때까지 이 프로세스를 계속하여 모든 하위 폴더를 효과적으로 수집합니다. 최종 결과는 ID 및 폴더 이름의 중첩 목록을 제공하므로 깊이에 관계없이 모든 하위 및 하위 폴더를 검색할 수 있습니다.
위 내용은 MySQL에서 재귀 쿼리를 사용하여 중첩 계층의 모든 하위 폴더를 검색하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!