>  기사  >  데이터 베이스  >  MySQL 쿼리 결과와 함께 PHP를 사용하여 자식, 손자 및 하위 노드를 가져오는 방법은 무엇입니까?

MySQL 쿼리 결과와 함께 PHP를 사용하여 자식, 손자 및 하위 노드를 가져오는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-06 15:02:02665검색

How to Fetch Child, Grandchild, and Descendant Nodes Using PHP with MySQL Query Results?

MySQL 쿼리 결과와 함께 PHP를 사용하여 자식, 손자, 하위 노드 가져오기

이 쿼리는 인접 목록이 있는 MySQL 테이블에서 데이터를 검색합니다. 여기서 각 행은 노드와 해당 상위 노드와의 관계를 나타냅니다. 목표는 이 데이터를 상위 노드 자체를 통합하면서 지정된 상위 ID 아래의 모든 하위, 손자 및 하위 노드를 포함하는 배열로 변환하는 것입니다.

재귀 함수 사용: fetch_recursive

fetch_recursive 함수는 지정된 상위 ID부터 시작하여 데이터 배열을 순회하고 모든 하위 노드가 포함될 때까지 하위 요소를 반복적으로 추가합니다. 함수 코드는 다음과 같습니다.

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 함수 사용

함수를 사용하려면 쿼리에서 얻은 데이터 배열을 fetch_recursive 함수에 전달하고 하위 항목을 검색하려는 상위 ID입니다. 예:

$list = fetch_recursive($data, 3);

이렇게 하면 ID 3의 상위 노드와 모든 하위 노드를 포함하여 다음 구조의 배열이 반환됩니다.

Array
(
    [0] => Array
        (
            [id] => 3
            [name] => Portable Electronics
            [parent_id] => 1
        )

    [1] => Array
        (
            [id] => 7
            [name] => Mp3 Players
            [parent_id] => 3
        )

    [2] => Array
        (
            [id] => 10
            [name] => Flash
            [parent_id] => 7
        )

    [3] => Array
        (
            [id] => 8
            [name] => CD Players
            [parent_id] => 3
        )

    [4] => Array
        (
            [id] => 9
            [name] => 2 Way Radios
            [parent_id] => 3
        )
)

위 내용은 MySQL 쿼리 결과와 함께 PHP를 사용하여 자식, 손자 및 하위 노드를 가져오는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.