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

简介: A 有 2 个直接下级B、C, B有2个直接下级D、E, C有2个直接下级F、G 我们正常的做法是使用递归这样操作:先查询出所有上级为A的子商户,再查询所有上级为上一个查询结果的子商户。

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


error_icon.png


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);
}
目录
相关文章
|
3月前
|
存储 关系型数据库 MySQL
提高查询性能的秘密:深入剖析聚集、辅助、覆盖和联合索引
提高查询性能的秘密:深入剖析聚集、辅助、覆盖和联合索引
|
3月前
|
Oracle 数据库 UED
后台查询接口影响响应时间最大的因素:用空间换时间的优缺点及解决方案
1.当数据库的一个表记录很多显然查询数据很慢。 2.当数据库的一个表记录不大,但是数据很大也可能很慢。 我们的一个用户表中一个building很大,当查询100条数据就会把服务器的内存搞爆掉。 当然查询时要查询筛选有用字段,不可以直接把记录的所有字段都查拆来。这样能减少内存消耗和提高查询速度。 3.在经常查询字段上建立索引。据说oracle上用索查询和不用索引查询在超多记录的情况下相差1000倍。 4.若出现嵌套查询显然会大大增加相应查询时间。要先预处理用管道操作把能合并的查询合并到一个查询中,然后生成map,然后再处理。这是标准的用空间换时间的方案。
73 8
|
4天前
|
Oracle Java 关系型数据库
淘宝粗排问题之引入场景外成交样本以优化全域成交hitrate,如何解决
淘宝粗排问题之引入场景外成交样本以优化全域成交hitrate,如何解决
|
4天前
淘宝粗排问题之对粗排阶段打分集合归因到对应的场景内和场景外成交如何解决
淘宝粗排问题之对粗排阶段打分集合归因到对应的场景内和场景外成交如何解决
|
29天前
|
SQL
云架构数据倾斜问题之无效值的数据源表以避免长尾效应如何解决
云架构数据倾斜问题之无效值的数据源表以避免长尾效应如何解决
|
3月前
|
SQL 存储 关系型数据库
深分页怎么导致索引失效了?提供6种优化的方案!
深分页怎么导致索引失效了?提供6种优化的方案!
|
3月前
|
缓存 负载均衡 算法
优化拼多多关键词搜索接口:提高查询响应速度的技巧
在电商平台中,关键词搜索接口是用户寻找商品的重要途径。一个高效、快速的搜索接口能够极大地提升用户的购物体验。针对拼多多这样的大型电商平台,优化搜索接口的查询响应速度尤为重要。本文将深入探讨如何通过多种方法来优化拼多多关键词搜索接口。
|
12月前
|
Java Spring
统计业务方法耗时【项目 商城】
统计业务方法耗时【项目 商城】
102 0
统计业务方法耗时【项目 商城】
|
存储 SQL NoSQL
千万级用户ms级抽奖N名设计方案
大促节零点时,从关注的用户中抽出N个人进行礼品发放,预计全网超过千万用户参加关注抽奖活动,要求: 同一用户不能重复参与 同一用户不允许二次中奖
103 0