PHP试题网_中国最大的免费网络PHP试题测试平台,PHP试卷调查,PHP试卷模板、PHP考试测验
公告: 【20201211】公告:复杂试卷成功上线,问答模块很快上线……网站将有诸多变化

项目中有这样一个需求:根据一个指定推广人,找到他的所有推广人名单。


数据库表结构:

agent_log:recommend_user_id为直推上级,recommend_user_id_2为间接推广上级


    public function root_stats($root_member_id=0)
    {
        if(empty($root_member_id)){
            $root_member_id = input('root_member_id', 0);
        }

        $total_arr = [];
        while(true){
            if(empty($arr_member_id)){
                $arr_member_id = [$root_member_id];
            }
            $arr = Db::name('agent_log')->where('recommend_user_id', 'in', $arr_member_id)
                                ->whereOr('recommend_user_id_2', 'in', $arr_member_id)->group('member_id')->column('member_id');
            if(empty($arr)){
                break;
            }else{
                $total_arr = array_merge($total_arr, $arr);
                $arr_member_id = $arr;
            }
        }

        $total_arr   = array_unique($total_arr);
        $total_arr   = array_values($total_arr);
        $list_mobile = Db::name('member')->where('member_id', 'in', $total_arr)->column('member_name');
        //dd($total_arr, $list_mobile);
        $data = [
            'total' => count($total_arr),
            'list'  => $list_mobile,
        ];
        ajaxOutFunc(200, $data);//自定义输出数据
    }


调用方法:

$data = $this->root_stats(1802695);//得到此人推广的下级数据


效果如下:

image.png



至此,已经介绍了两种无级限取数据的方法。无论是递归还是while循环,只要你逻辑清晰,用哪种方法都一样。


作者:OK兄 浏览次数:35