统计销售最多的商品实现方法
订单表如下
id | good_id | price | amount | subtotal | deleted_at |
---|---|---|---|---|---|
1 | 12 | 12.00 | 10 | 120.00 | NULL |
2 | 12 | 12.00 | 10 | 120.00 | NULL |
3 | 12 | 12.00 | 10 | 120.00 | NULL |
4 | 12 | 12.00 | 10 | 120.00 | NULL |
5 | 11 | 1.00 | 2 | 2.00 | NULL |
5 | 11 | 1.20 | 10 | 12.00 | NULL |
统计出售量最多的商品
我的实现方法
$res = Good::where('deleted_at', null)
->selectRaw('count(good_id) as count_good, good_id')
->groupBy('good_id')
->with(['good' => function ($query) {
return $query->select('id', 'goods_name');
}])
->orderBy('count_good', 'desc')
->get()
->toArray();
dd($res);
返回结果
[
[
"count_good" => 4,
"good_id" => 12,
"good" => [
"id" => 12,
"goods_name" => "香蕉"
]
],
[
"count_good" => 2,
"good_id" => 11,
"good" => [
"id" => 11,
"goods_name" => "苹果"
]
]
]
在这个实现方法配合 (定时任务
+ Supervisor
) 每天凌晨执行统计前一天的销售结果存起来,当需要是,直接返回。
现在有个疑问,如果数据在上100
万的时候,上面的实现方法影响性能吗?有没有比较好的实现方法?
100W 对 MySQL 来说就是一个小表