首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >无限级子商户的查询优化方法

无限级子商户的查询优化方法

作者头像
宣言言言
发布2019-12-15 21:45:36
1.2K0
发布2019-12-15 21:45:36
举报
文章被收录于专栏:宣言(Siam)博客宣言(Siam)博客

无限级平台必须解决的一个问题,分享一下我在网上学习到的方法。

假设平台有这样的上下级关系

A 有 2 个直接下级B、C,    B有2个直接下级D、E,    C有2个直接下级F、G

我们正常的做法是使用递归这样操作:先查询出所有上级为A的子商户,再查询所有上级为上一个查询结果的子商户。如第一步查询出B、C,第二步查询所有上级为B、C的商户(mysql的 IN 范围条件实现)。

这样的递归查询耗时是非常长的。(个人觉得具体消耗在连接mysql数据库的次数上)

现在我们的做法是这样的:一次性查询出所有的商户信息(id、上级id),并且按正序排列(添加时间,因为要有第三级的商户必须先有第二级商户,按正序排列才可以正常得到结果)

<?php
function getTeamMember($allMembers, $id){
    $teams        = [];         // 在$id下的所有商户id数组,最终的返回结果
    $teams[$id]   = $id;     // 把我们要查询的这个id先添加在这个数组里,设置的值任意,只要让这个键值存在即可。
    
    // 遍历每一个会员信息
    foreach($allMembers as $key => $v){
        // 判断遍历到的这个会员上级是否在团队数组里 (判断键值)
        if( isset( $teams[$v['p_id'] ] ) ){
            // 该会员的上级属于团队 追加进团队
            $teams[ $v['id'] ] = 123;  // 也是任意值 存在即可
        }
        // 遍历完就把这个会员的信息删除~不需要储存了
        unset($allMembers[$key]);
    }
    // 把我们第二步传递进来的自身的$id删除掉 也就是第一个
    unset($teams[$id]);
    // 返回数据
    return array_keys($teams);
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.08.30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档