找回密码
 立即注册
搜索
查看: 403|回复: 0

[基础] 从一个根用户得到他推广下级的所有人[使用while,非递归]

  [复制链接]
发表于 2023-2-22 21:50 | 显示全部楼层 |阅读模式

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

数据库表结构:

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循环,只要你逻辑清晰,用哪种方法都一样。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|学习笔记

GMT+8, 2024-12-22 15:12 , Processed in 0.021482 second(s), 13 queries , APCu On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表