재귀를 사용하여 MySQL 테이블에서 상위 찾기
데이터베이스 스키마에서는 계층적 관계를 설정하는 것이 일반적입니다. 이러한 데이터를 쿼리할 때는 특정 레코드뿐만 아니라 해당 레코드의 계층적 연결도 검색해야 합니다. 이 문서에서는 단일 쿼리를 사용하여 MySQL 테이블 내에서 레코드의 모든 상위 항목을 찾는 작업을 설명합니다.
문제 설명
ID, TITLE 열이 있는 테이블이 제공됩니다. , CONTROLLER, METHOD 및 PARENT_ID는 단일 SQL을 사용하여 TITLE이 "Categories"인 레코드의 모든 상위 항목을 찾습니다. 쿼리.
원하는 출력
출력에는 다음이 표시되어야 합니다. 열:
다음을 가져와야 합니다. 레코드:
id | title | controller | method | url | parent_id |
---|---|---|---|---|---|
3 | Modules | admin | modules | (NULL) | 0 |
17 | User Modules | modules | user_module | (NULL) | 3 |
31 | Categories | categories | category | (NULL) | 17 |
솔루션
원하는 결과를 얻으려면 MySQL의 재귀 쿼리 기능을 활용해야 합니다. 사용할 수 있는 SQL 쿼리는 다음과 같습니다.
SELECT T2.id, T2.title,T2.controller,T2.method,T2.url FROM ( SELECT @r AS _id, (SELECT @r := parent_id FROM menu WHERE id = _id) AS parent_id, @l := @l + 1 AS lvl FROM (SELECT @r := 31, @l := 0) vars, menu m WHERE @r <> 0) T1 JOIN menu T2 ON T1._id = T2.id ORDER BY T1.lvl DESC;
이 쿼리를 분석해 보겠습니다.
실행하여 이 쿼리를 사용하면 단일 데이터베이스 호출에서 TITLE이 포함된 레코드의 모든 상위 항목을 "Categories"로 검색할 수 있습니다.
위 내용은 단일 재귀 쿼리를 사용하여 MySQL 테이블에서 모든 상위 레코드를 어떻게 찾을 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!