mysql 查询每人每天_PHP+MySQL实现对一段时间内每天数据统计优化操作实例
本文实例讲述了PHP+MySQL实现对一段时间内每天数据统计优化操作。分享给大家供大家参考,具体如下:
在互联网项目中,对项目的数据分析必不可少。通常会统计某一段时间内每天数据总计变化趋势调整营销策略。下面来看以下案例。
案例
在电商平台中通常会有订单表,记录所有订单信息。现在我们需要统计某个月份每天订单数及销售金额数据从而绘制出如下统计图,进行数据分析。
订单表数据结构如下:
order_id
order_sn
total_price
enterdate
25396
A4E610E250C2D378D7EC94179E14617F
2306.00
2017-04-01 17:23:26
25397
EAD217C0533455EECDDE39659ABCDAE9
17.90
2017-04-01 22:15:18
25398
032E6941DAD44F29651B53C41F6B48A0
163.03
2017-04-02 07:24:36
此时查询某月各天下单数,总金额应当如何做呢?
一般方法
首先最容易想到的方法,先利用 php 函数 cal_days_in_month() 获取当月天数,然后构造一个当月所有天的数组,然后在循环中查询每天的总数,构造新数组。
代码如下:
$month = '04';
$year = '2017';
$max_day = cal_days_in_month(CAL_GREGORIAN, $month, $year); //当月最后一天
//构造每天的数组
$days_arr = array();
for($i=1;$i<=$max_day;$i++){
array_push($days_arr, $i);
}
$return = array();
//查询
foreach ($days_arr as $val){
$min = $year.'-'.$month.'-'.$val.' 00:00:00';
$max = $year.'-'.$month.'-'.$val.' 23:59:59';
$sql = "select count(*) as total_num,sum(`total_price`) as amount from `orders` where `enterdate` >= {$min} and `enterdate` <= {$max}";
$return[] = mysqli_query($sql);
}
return $return;
这个sql简单,但是每次需要进行30次查询请,严重拖慢响应时间。
优化
如何使用一个sql直接查询出各天的数量总计呢?
此时需要利用 mysql 的 date_format 函数,在子查询中先查出当月所有订单,并将 enterdate 用 date_format 函数转换为 天 ,然后按天 group by 分组统计。 代码如下:
$month = '04';
$year = '2017';
$max_day = cal_days_in_month(CAL_GREGORIAN, $month, $year); //当月最后一天
$min = $year.'-'.$month.'-01 00:00:00';
$max = $year.'-'.$month.'-'.$max_day.' 23:59:59';
$sql = "select t.enterdate,count(*) as total_num,sum(t.total_price) as amount (select date_format(enterdate,'%e') as enterdate,total_price from orders where enterdate between {$min} and {$max}) t group by t.enterdate order by t.enterdate";
$return = mysqli_query($sql);
如此,将30次查询减少到1次,响应时间会大大提高。
注意:
1.由于需查询当月所有数据,在数据量过大时,不宜采取本方法。
2.为避免当天没有数据而造成的数据缺失,在查询后,理应根据需求对数据进行处理。
希望本文所述对大家PHP程序设计有所帮助。
mysql 查询每人每天_PHP+MySQL实现对一段时间内每天数据统计优化操作实例相关推荐
- mysql 优化300例_PHP+MySQL实现对一段时间内每天数据统计优化操作实例
本文实例讲述了PHP+MySQL实现对一段时间内每天数据统计优化操作.分享给大家供大家参考,具体如下: 在互联网项目中,对项目的数据分析必不可少.通常会统计某一段时间内每天数据总计变化趋势调整营销策略 ...
- 查询一个表中一个字段相同的数据_最实用MySQL 查询当天、本周,本月、上一个月的数据...
MySQL 查询当天.本周,本月.上一个月的数据 mysql查询当天的所有信息: SELECT * FROM 表名 WHERE year(时间字段名)=year(now()) and month(时间 ...
- MySQL查询时记录行号rownum MySQL查询显示行号MySQL查询显示行号MySQL流水号自MySQL自增行号
MySQL查询时记录行号rownum MySQL查询显示行号MySQL查询显示行号MySQL流水号自MySQL自增行号 一.前言 Oracle中有rownum,实现查询的时候记录行号,MySQL中没有 ...
- mysql统计每半小时内的数据(查寻某段时间内的数据)
mysql统计每半小时内的数据(查寻某段时间内的数据) 表结构 sql展示 sql说明 结果展示 思考 需求:统计某段时间内的数据,以半小时为单位统计 表结构 sql展示 SELECT @rank:= ...
- mysql每隔俩小时、四小时、八小时进行数据统计
mysql每隔俩小时.四小时.八小时进行数据统计 需求:我们经常会遇到每隔一分钟.一小时.一天.一个月进行数据统计,遇到如标题所说的统计信息比较少见,在遇到一些坑之后,解决了问题,先上坑: HOUR ...
- PHP中mysql查询全部过程_PHP到MySQL数据查询过程概述_MySQL
摘要 本文概述了从PHP层发起mysql查询请求到mysql server 返回结果集的工作流程,并简单描述了各层可能涉及到的动作和组件.从全局把握整个交互过程. PHP层到MySQL层 Php到sq ...
- mysql表统一编码_PHP MySQL Apache统一编码
PHP & MySQL & Apache统一编码 在用PHP与MySQL中的数据库交互的时候,老是碰到乱码问题.要么是从数据库读出的数据乱码,要么是无法存入数据库,神烦. 最初的默认编 ...
- mysql查询字段变慢,MySQL Query IN()子句在索引列上变慢
我有一个由PHP脚本生成的MySQL查询,该查询将如下所示: SELECT * FROM Recipe_Data WHERE 404_Without_200 = 0 AND Failures_With ...
- MySQL查询缓存设置提高MySQL查询性能
首先看看MSYQL逻辑框架:图片来自高性能mysql 如果使用了QueryCache,当查询接收到一个和之前同样的查询,服务器将会从查询缓存中检索结果,而不是再次分析和执行相同的查询.这样就能大大提高 ...
最新文章
- C++ 和C 语言混合代码导致的问题
- cisco+路由器+固定外网IP与NAT+设置
- Eureka简介与Eureka Server上
- 大家注意:升级 win8.1 火狐浏览器 谷歌浏览器 搜狗五笔输入法 都不能用啦
- .Net程序内存泄漏解析
- LeetCode 133. 克隆图(图的BFS/DFS)
- python 3d大数据可视化_基于Python的数据可视化库pyecharts介绍
- 决定好好研究一些开源的系统
- python类的属性打印_python 打印类的属性、方法
- WebStrom如何创建项目,为什么我开始选择HTML5到自定义路径报错
- 免费中文Python电子书 转载
- 想在Win11上安装数据库?以下连招,轻松解决(全网详细巨无霸)
- 电脑版美食大战老鼠放置html,美食大战老鼠2
- 程序员年薪30W属于第几梯队?
- 开启微信浏览器调试工具
- 选择结构与分支结构 计算器的实现
- hadoop到底是什么
- git clone 身份验证失败
- JavaScript模拟退火
- 圆柱体积怎么算立方公式_四个计算圆柱的体积常用公式(附例题)
热门文章
- TabLayout+ViewPager实现选项卡动态滑动效果
- 计组第一章(唐朔飞)——计算机系统概述章节总结
- 4.2.3 OS之减少磁盘延迟时间的方法(交替编号、错位命名)
- java中printarray和selectsort方法_算法题(一)
- aac蓝牙编解码协议_最新的真无线蓝牙耳机选购指南
- html转markdown_markdown转html带目录和图片压缩
- OS / 进程中某个线程崩溃,是否会对其他线程造成影响?
- 来自微博html5怎么设置,来自微博的面试题解决方案
- mysql now str,数据库学习之MySQL (十)—— 日期和时间函数 NOW STR_TO_DATE DATE_FORMAT 流程控制函数 IF IFNULL CASE...
- php 插入数据 不成功,thinkphp5连接oracle用insert插入数据失败