利用leftJoinsub创建子查询让查询语句groupBy和orderBy一起使用

开发有时候经常遇到需要把sql查询出来的数据去重并按照一个查询出的统计字段排序.
这里举一个rightJoinSub的例子:
我要统计一个施工项目下面的工种 并根据工种人数倒叙排列

//首先统计出该施工项目下的人员工种和每个工种的总人数
        $workTypes = Worker::from('workers AS w')
            ->leftJoin('projects AS p','p.projectCode', '=', 'w.pCode')
            ->leftJoin('worker_types AS wt', 'w.workType', '=', 'wt.id')
            ->where('w.pCode', $project)
            ->groupBy('w.workType')
            ->select('wt.id', DB::raw('IFNULL(wt.name, "其他") AS workType'),                 DB::raw('COUNT(w.id) AS total'));

//根据工种的id右关联工种表然后根据上面查出的字段进行排序
        $list = WorkerType::from('worker_types AS wt')
            ->rightJoinSub($workTypes, 'wts', 'wts.id', '=', 'wt.id')
            ->orderBy('wts.total', 'DESC')
            ->get(['wt.id', DB::raw('IFNULL(wt.name, "其他") AS workType'),                     'wts.total']);

leftJoinSub同理
这种查询只适合小数据量查询 数据量大会很卡

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!