> 데이터 베이스 > MySQL 튜토리얼 > MySQL 쿼리 결과와 함께 PHP를 사용하여 상위 노드 아래의 모든 하위, 손자 및 하위 노드를 검색하려면 어떻게 해야 합니까?

MySQL 쿼리 결과와 함께 PHP를 사용하여 상위 노드 아래의 모든 하위, 손자 및 하위 노드를 검색하려면 어떻게 해야 합니까?

Susan Sarandon
풀어 주다: 2024-11-09 01:35:02
원래의
900명이 탐색했습니다.

How do I retrieve all child, grandchild, and descendant nodes under a parent node using PHP with MySQL query results?

MySQL 쿼리 결과와 함께 PHP를 사용하여 부모 아래의 모든 하위, 손자 등 노드 가져오기

원래 문제:

상위 노드와 연결된 모든 하위, 손자 및 후속 하위 노드를 검색하는 것은 계층적 데이터 구조로 작업할 때 일반적인 작업입니다. 이 문제는 데이터베이스 테이블이 데이터 구성을 위해 인접 목록 모델을 사용하는 시나리오에서 발생합니다.

재귀를 사용한 접근 방식:

이 문제를 해결하려면 재귀가 효과적인 것으로 입증되었습니다. 접근하다. 이 목표를 달성하기 위해 재귀를 사용하는 방법에 대한 자세한 설명은 다음과 같습니다.

1. 기본 함수 설정:

재귀 함수는 문제를 해결하기 위해 스스로를 호출하는 함수이며 계층적 또는 중첩된 데이터 구조와 관련된 시나리오에서 자주 사용됩니다. 이 경우 기본 함수의 이름은 fetch_recursive로 지정됩니다.

2. 재귀 호출 기준 식별:

fetch_recursive 내에서 두 가지 기본 조건에 따라 재귀 호출이 이루어지는 시기가 결정됩니다.

  • 상위 노드 발견: 평가 중인 현재 노드는 우리가 관심 있는 상위 노드입니다(제공된 ID 기준).
  • 하위 노드 발견: 현재 노드에 상위 노드 ID와 일치하는 상위 ID가 있는 경우 .

3. 결과 배열 구성:

재귀 호출이 이루어질 때마다 함수는 현재 노드의 관련 데이터로 결과 배열을 채웁니다. 이 배열은 재귀 호출이 트리 구조를 순회함에 따라 반복적으로 증가합니다.

4. 하위 노드 재귀 검색:

현재 노드에 하위 노드(자식 속성의 존재로 식별됨)가 있는 경우 해당 하위 노드를 검색하기 위해 또 다른 재귀 호출이 수행됩니다. 이 프로세스는 상위 노드의 모든 하위 노드가 캡처될 때까지 계속됩니다.

추가 기능:

1. 손자 및 하위 항목 처리:

fetch_recursive의 재귀적 특성으로 인해 계층 구조를 자동으로 순회하여 하위 노드뿐만 아니라 손자 및 후속 하위 항목도 검색합니다.

2 . 결과 통합:

모든 재귀 호출이 완료된 후 함수는 지정된 상위 노드 아래의 모든 하위 노드를 포함하는 포괄적인 단일 배열을 반환합니다.

코드 구현:

function fetch_recursive($src_arr, $currentid, $parentfound = false, $cats = array())
{
    foreach($src_arr as $row)
    {
        if((!$parentfound && $row['id'] == $currentid) || $row['parent_id'] == $currentid)
        {
            $rowdata = array();
            foreach($row as $k => $v)
                $rowdata[$k] = $v;
            $cats[] = $rowdata;
            if($row['parent_id'] == $currentid)
                $cats = array_merge($cats, fetch_recursive($src_arr, $row['id'], true));
        }
    }
    return $cats;
}
로그인 후 복사
로그인 후 복사

사용법:

fetch_recursive 함수를 활용하려면 원본 데이터 배열(이 경우 $data)과 하위 항목을 검색하려는 노드의 ID를 전달하면 됩니다. 예를 들어, 노드 3 아래의 모든 자식, 손자, 하위 노드를 검색하려면:

function fetch_recursive($src_arr, $currentid, $parentfound = false, $cats = array())
{
    foreach($src_arr as $row)
    {
        if((!$parentfound && $row['id'] == $currentid) || $row['parent_id'] == $currentid)
        {
            $rowdata = array();
            foreach($row as $k => $v)
                $rowdata[$k] = $v;
            $cats[] = $rowdata;
            if($row['parent_id'] == $currentid)
                $cats = array_merge($cats, fetch_recursive($src_arr, $row['id'], true));
        }
    }
    return $cats;
}
로그인 후 복사
로그인 후 복사

이렇게 하면 $list 변수가 모든 관련 노드가 포함된 배열로 채워집니다.

위 내용은 MySQL 쿼리 결과와 함께 PHP를 사용하여 상위 노드 아래의 모든 하위, 손자 및 하위 노드를 검색하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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