热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

现在我的需求是这样的,每一个用户会产生N多订单现在要排序订单数量从大到小的用户.如果按照传统我先将每一个用户的订单总数统计,然后进行排序.这样一但数据量变大基本无法排序会很消耗系统资源统计时间也...
现在我的需求是这样的,
每一个用户会产生 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

推荐阅读
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了关系型数据库和NoSQL数据库的概念和特点,列举了主流的关系型数据库和NoSQL数据库,同时描述了它们在新闻、电商抢购信息和微博热点信息等场景中的应用。此外,还提供了MySQL配置文件的相关内容。 ... [详细]
  • Redis API
    安装启动最简启动命令行输入验证动态参数启动配置文件启动常用配置通用命令keysbdsize计算key的总数exists判断是否存在delkeyvalue删除指定的keyvalue成 ... [详细]
  • 面试经验分享:华为面试四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试
    最近有朋友去华为面试,面试经历包括四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试。80%的人都在第一轮电话面试中失败,因为缺乏基础知识。面试问题涉及 ... [详细]
  • 本文介绍了如何使用call_user_func_array函数向Redis中添加有序列表或集合。该函数可以接受一个数组作为参数,第一项是要操作的有序列表或集合的键,后续的项目是排序权重和值的交替。通过该函数,可以方便地向Redis中添加多个元素,并指定它们的排序权重。 ... [详细]
author-avatar
海风
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有