MySQL에서 하위 폴더의 재귀적 검색
계층적 데이터 구조로 작업할 때 하위 요소와 하위 요소를 검색해야 합니다. 데이터베이스에서. 폴더를 나타내는 테이블의 경우 지정된 상위 폴더에 대한 모든 하위 폴더를 검색할 수 있는 쿼리가 필요합니다.
다음 구조의 폴더 테이블이 있는 시나리오를 고려해 보세요.
CREATE TABLE IF NOT EXISTS `Folder` ( `idFolder` INT(11) NOT NULL AUTO_INCREMENT, `FolderName` VARCHAR(150) NOT NULL, `idFolderParent` INT(11) NULL, PRIMARY KEY (`idFolder`), CONSTRAINT `fk_1` FOREIGN KEY (`idFolderParent`) REFERENCES `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
도전
idFolder가 주어지면 목표는 검색하는 단일 쿼리를 구성하는 것입니다. 모든 하위 폴더와 하위 하위 폴더를 반복적으로 포함합니다. 예를 들면 다음과 같습니다.
해결책
제공된 솔루션은 재귀 검색을 달성하기 위해 MySQL 사용자 정의 변수와 하위 쿼리의 조합을 활용합니다.
SELECT GROUP_CONCAT(lv SEPARATOR ',') FROM ( SELECT @pv:=(SELECT GROUP_CONCAT(idFolder SEPARATOR ',') FROM Folder WHERE FIND_IN_SET(idFolderParent, @pv)) AS lv FROM Folder JOIN (SELECT @pv:=5) tmp ) a;
설명
쿼리는 FIND_IN_SET() 함수를 사용합니다. 사용자 정의 변수 @pv의 값에 현재 행의 idFolderParent가 존재하는지 확인합니다. 그렇다면 값이 lv 변수에 추가됩니다. 하위 쿼리는 각각 재귀 검색 수준을 나타내는 여러 행을 생성합니다.
SEPARATOR 절과 함께 GROUP_CONCAT() 함수를 사용하면 각 행의 결과가 지정된 구분 기호로 결합되고 구분됩니다(이 경우 , 쉼표). 최종 결과는 연결된 하위 폴더가 포함된 문자열입니다.
이 솔루션은 데이터베이스의 상위 항목 순서가 엄격하게 계층적이지 않은 경우에도 하위 및 하위 하위 폴더를 반복적으로 검색할 수 있는 강력한 방법을 제공합니다.
위 내용은 MySQL에서 재귀 폴더 검색을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!