Home > Database > Mysql Tutorial > body text

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

Patricia Arquette
Release: 2024-11-06 15:02:02
Original
658 people have browsed it

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

Get Child, Grandchild, and Descendent Nodes Using PHP with MySQL Query Results

This query retrieves data from a MySQL table with an adjacency list structure, where each row represents a node and its relationship to its parent. The goal is to transform this data into an array that includes all child, grandchild, and descendant nodes under a specified parent ID while incorporating the parent node itself.

Using a Recursive Function: fetch_recursive

The fetch_recursive function traverses the data array, starting with the given parent ID, and recursively adds child elements until all descendent nodes have been included. Here's the function code:

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;
}
Copy after login

Using the fetch_recursive Function

To use the function, pass the data array obtained from the query to the fetch_recursive function and specify the parent ID you want to retrieve the descendants from. For example:

$list = fetch_recursive($data, 3);
Copy after login

This will return an array with the following structure, including the parent node with ID 3 and all its descendants:

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
        )
)
Copy after login

The above is the detailed content of How to Fetch Child, Grandchild, and Descendant Nodes Using PHP with MySQL Query Results?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!