专栏首页宣言(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);
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Navicat数据同步,主键重复无法插入

    Navicat是一个非常好用的可视化mysql管理软件(其他数据库也有对应版本的支持)

    宣言言言
  • mysql聚合统计数据查询缓慢优化方案

    随着业务发展,这些表会越来越大,如果处理不当,查询统计的速度也会越来越慢,直到业务无法再容忍。

    宣言言言
  • Thinkphp中模型的正确使用方式,ORM的思想概念

    在这3个步骤中,我们可以知道,如果有运用到ORM思想抽象映射的,那就只可能是Query查询器模块,但是我们可以细查TP文档中关于数据集的描述。

    宣言言言
  • R语言 | 根据数据框的顺序进行筛选

    这里有两个数据框,两者有相同的列(ID),这里想把第一个数据框,按照第二个数据框的ID列进行提取,顺序和第二个数据框一致。

    邓飞
  • phalapi-入门篇5(数据库操作和Model层)

    #phalapi-入门篇5(数据库操作和Model层)# ? ##前言## 先在这里感谢phalapi框架创始人@dogstar,为我们提供了这样一个优秀的开源...

    喵了个咪233
  • java进阶|MyBatis系列文章(七)多表查询操作

    以上jar包依赖主要是mysql连接,支持mybatis操作以及简化get/set方法的lombok包。

    后端Coder
  • Django model 自定义指定主键

    我最近在做一个新项目,数据工程师在数据库中已经新建了一些表,并且数据表中已经填充了数据,但是我用 django 写的项目中需要用到这些数据表,开发中我使用了 d...

    用户4945346
  • mysql使用基础 sql语句与数据完整性(二)

    二、DML:Data Manipulation Language 数据操作语言   作用:操作表中的数据的。   关键:INSERT UPDATE DELE...

    欠扁的小篮子
  • java进阶|Mybatis系列文章(三)表关联查询操作

    整个项目所需要的xml文件进行数据的增删改查操作ClassesMapper.xml文件

    后端Coder
  • 分表查询统计的一个具体案例

    问题描述 mysql数据库在数据量较大的情况下,对数据表进行水平分表,按照年份,如下:

    后端技术探索

扫码关注云+社区

领取腾讯云代金券