> 데이터 베이스 > MySQL 튜토리얼 > 단일 재귀 쿼리를 사용하여 MySQL 테이블에서 레코드의 모든 조상을 찾는 방법은 무엇입니까?

단일 재귀 쿼리를 사용하여 MySQL 테이블에서 레코드의 모든 조상을 찾는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-12-08 07:31:11
원래의
543명이 탐색했습니다.

How to Find All Ancestors of a Record in a MySQL Table Using a Single Recursive Query?

단일 재귀 쿼리를 사용하여 MySQL 테이블에서 모든 상위 항목 찾기

샘플이 포함된 다음 MySQL 테이블 스키마를 고려하세요. 데이터:

| ID |             TITLE | CONTROLLER |            METHOD | PARENT_ID |
|----|-------------------|------------|-------------------|-----------|
|  1 |         Dashboard |      admin |         dashboard |         0 |
|  2 |           Content |      admin |           content |         0 |
|  3 |           Modules |      admin |           modules |         0 |
...
로그인 후 복사

과제:

우리의 목표는 단일 레코드를 사용하여 특정 레코드, 즉 제목 = '카테고리'인 레코드의 모든 상위 레코드를 찾는 것입니다. SQL 쿼리.

원함 출력:

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       
로그인 후 복사

해결책:

재귀 공통 테이블 표현식(CTE)을 사용하여 테이블 계층 구조를 순회하고 원하는 테이블의 모든 상위 항목을 식별합니다. 레코드:

WITH RECURSIVE Parents AS (
    SELECT id, parent_id
    FROM menu
    WHERE id = 31
    UNION ALL
    SELECT m.id, m.parent_id
    FROM Parents AS p
    JOIN menu AS m ON p.parent_id = m.id
)
SELECT m.id, m.title, m.controller, m.method, m.url, m.parent_id
FROM Parents AS p
JOIN menu AS m ON p.id = m.id
ORDER BY p.id DESC;
로그인 후 복사

설명:

  • CTE Parents는 대상 레코드의 ID(31)로 초기화됩니다.
  • 쿼리의 재귀 부분은 현재 레코드의 모든 상위 항목을 선택하여 다음을 계속합니다. 순회.
  • ORDER BY 절은 결과를 내림차순으로 정렬하고 직계 상위 항목이 먼저 나타납니다.

이 쿼리를 실행하면 원하는 출력을 얻을 수 있으며 해당 항목의 모든 상위 항목이 나열됩니다. 카테고리 기록입니다.

위 내용은 단일 재귀 쿼리를 사용하여 MySQL 테이블에서 레코드의 모든 조상을 찾는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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