mysql通过订单量排序_mysql-关于PHP中订单按照从大到小的顺序排序的思路.

现在我的需求是这样的,

每一个用户会产生 N 多订单 现在要排序 订单数量从大到小 的用户.

如果按照传统 我先将每一个用户的订单总数统计,然后进行排序.这样一但数据量变大基本无法排序会很消耗系统资源统计时间也会变长.请问有什么方法吗?

回复内容:

现在我的需求是这样的,

每一个用户会产生 N 多订单 现在要排序 订单数量从大到小 的用户.

如果按照传统 我先将每一个用户的订单总数统计,然后进行排序.这样一但数据量变大基本无法排序会很消耗系统资源统计时间也会变长.请问有什么方法吗?

0.假设一天几十万的订单,搞个脚本,每天跑一次,统计一天的订单数

1.根据订单时间从数据库获取每天的总订单

可以为时间加上索引

2.根据取出的数据,从程序方面,按用户分组,统计订单中每位用户的订单数

不要用sql来做分组统计,因为数据库压力会非常大,可以放到php中来做处理,统计这些订单中的每一个用户有多少订单,相当于sql中的group by user

3.然后加到用户的订单总数中,可以放到redis中

像这种情况,可可以新增统计表呀。各种统计数据可以每天定时统计呀。然后就不用每次都要去统计一遍喽。

用户表增加一个订单总数和订单总金额的字段不就行了...

这是典型的空间时间转换嘛。。。既然你性能跟不上只能加字段或者看需求了,或者换一种数据库会稍微好一点

如果你有这样的业务需求的话,我建议在用户的这个表中增加一个列,就是计算用户购买的订单的数量列。这样用户每创建一个订单则就+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

那你可以直接在一个sql里面查询就好了:

select count(*) as num from `order` group by id

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值