開發有時候經常遇到需要把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 協議》,轉載必須註明作者和本文連結