MySQL recursive tree search

前端 未结 6 952
臣服心动
臣服心动 2020-12-17 07:06

I have a database with a tree of names that can go down a total of 9 levels deep and I need to be able to search down a signal branch of the tree from any point on the branc

6条回答
  •  春和景丽
    2020-12-17 07:36

    Have you thought about using a recursive loop? i use a loop for a cms i built on top of codeigniter that allows me to start anywhere in the site tree and will then subsequently filter trhough all the children> grand children > great grand children etc. Plus it keeps the sql down to short rapid queries opposed to lots of complicated joins. It may need some modifying in your case but i think it could work.

    /**
     * build_site_tree
     *
     * @return void
     * @author Mike Waites
    **/
    public function build_site_tree($parent_id)
    {
        return $this->find_children($parent_id);
    }
    
    /** end build_site_tree **/
    
    // -----------------------------------------------------------------------
    
    /**
     * find_children
     * Recursive loop to find parent=>child relationships
     *
     * @return array $children
     * @author Mike Waites
    **/
    public function find_children($parent_id)
    {
        $this->benchmark->mark('find_children_start');
    
        if(!class_exists('Account_model'))
                $this->load->model('Account_model');
    
        $children = $this->Account_model->get_children($parent_id);
    
        /** Recursively Loop over the results to build the site tree **/
        foreach($children as $key => $child)
        {
            $childs = $this->find_children($child['id']);
    
            if (count($childs) > 0)
                    $children[$key]['children'] = $childs;
        }
    
        return $children;
    
        $this->benchmark->mark('find_children_end');
    }
    
    /** end find_children **/
    

    As you can see this is a pretty simplfied version and bear in mind this has been built into codeigniter so you will need to modyfy it to suite but basically we have a loop that calls itself adding to an array each time as it goes. This will allow you to get the whole tree, or even start from a point in the tree as long as you have the parent_id avaialble first!

    Hope this helps

提交回复
热议问题