多级分类查询计算数量查询低于1秒

本文探讨如何优化多级分类的查询计算,确保在1秒内完成数量查询,提高系统的响应速度。
摘要由CSDN通过智能技术生成

/**
     * 产品分类
     * @param Request $request
     */
    public function leftMenu()
    {
        $product_cate_list = db('cates')->field('id,pid,cate_name,path')->select();
        $product_cate_list = generateTree($product_cate_list, $pk = 'id', $pid = 'pid',$child = 'subcate');
        $product_cate_list = $this->product_count($product_cate_list);
        //未分类
        $not_classified = db('optional_product')
            ->where('cate_id',null)
            ->count();
        array_unshift($product_cate_list,[
            'id' => -1,
            'pid' => 0,
            'cate_name' => '未分类('.$not_classified.')'
        ]);
        array_unshift($product_cate_list,[
            'id' => 0,
            'pid' => 0,
            'cate_name' => '全部('.(db('optional_product')->count()).')'
        ]);

        $this->return_msg('200','成功',$product_cate_list);

    }

    protected function product_count(&$arr)
    {
        foreach ($arr as $key => &$value){
            $arr[$key]['img_count'] = db('optional_product')
                ->where('cate_path', 'like', '%|' . $value['id'] . '|%')
                ->count();
            $arr[$key]['cate_name'] = $value['cate_name'] . '('.$arr[$key]['img_count'].')';
            if(isset($value['subcate'])){
                $this->product_count($value['subcate']);
            }
        }
        return $arr;
    }


/**
 * 多层分类树状图
 * @param $list     原始数组
 * @param string $pk 当前分类id
 * @param string $pid 父类id
 * @param string $child 子类键名
 * @param int $root 顶级分类
 * @return array  多级结构数组
 */
function generateTree($list, $pk = 'id', $pid = 'parent_id', $child = 'children', $root = 0)
{
    $tree = array();
    $packData = array();
    foreach ($list as $data) {
        $packData[$data[$pk]] = $data;
    }
    foreach ($packData as $key => $val) {
        if ($val[$pid] == $root) {

            $tree[] = &$packData[$key];
        } else {
            $packData[$val[$pid]][$child][] = &$packData[$key];
        }
    }
    return $tree;
}

响应速度

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jason Ho

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值