现在我的需求是这样的,
每一个用户会产生 N 多订单 现在要排序 订单数量从大到小 的用户.
如果按照传统 我先将每一个用户的订单总数统计,然后进行排序.这样一但数据量变大基本无法排序会很消耗系统资源统计时间也会变长.请问有什么方法吗?
现在我的需求是这样的,
每一个用户会产生 N 多订单 现在要排序 订单数量从大到小 的用户.
如果按照传统 我先将每一个用户的订单总数统计,然后进行排序.这样一但数据量变大基本无法排序会很消耗系统资源统计时间也会变长.请问有什么方法吗?
如果你有这样的业务需求的话,我建议在用户的这个表中增加一个列,就是计算用户购买的订单的数量列。这样用户每创建一个订单则就+1,最后排序的时候,可以直接按照这个字段排序就ok了。简单快捷。
用户表 user
id | name
1 | 张三
2 | 李四
3 | 王五
4 | 赵六
订单表 order
user_id | orderNo
1 | 1111111
2 | 2222222
1 | 3333333
3 | 4444444
3 | 5555555
2 | 6666666
3 | 7777777
3 | 8888888
2 | 9999999
查询语句
select a.id,a.name,ifnull(b.num,0) as order_num from user as a left join
(select user_id,count(orderNo) as num from order where 1 group by orderNo) as b on a.id=b.user_id order by b.num desc
查询结果
id | name | order_num
3 王五 4
2 李四 3
1 张三 2
4 赵六 0
5 回答3.2k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
1 回答4k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答2.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
5 回答1.4k 阅读
0.假设一天几十万的订单,搞个脚本,每天跑一次,统计一天的订单数
1.根据订单时间从数据库获取每天的总订单
2.根据取出的数据,从程序方面,按用户分组,统计订单中每位用户的订单数
3.然后加到用户的订单总数中,可以放到redis中