内容简介:这篇文章主要介绍了PHP+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相关内容感兴趣的读者可查看本站专题:《php+mysql数据库操作入门教程》、《php+mysqli数据库程序设计技巧总结》、《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 微信小程序数据统计和错误统计的实现
- Enovy proxy中的数据统计
- OLAP 分析引擎,基于 Druid 组件数据统计分析
- 使用 Spark Pivot 处理复杂的数据统计需求
- WebRTC视频数据统计之延时、抖动与丢包
- 使用Spark进行数据统计并将结果转存至MSSQL
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
21天学通C语言
(美国)琼斯(Bradley L.Jones) (美国)埃特肯(Peter Aitken) / 信达工作室 / 人民邮电出版社 / 2012-8 / 69.00元
《21天学通C语言(第6版•修订版)》是初学者学习C语言的经典教程。本版按最新的标准(ISO∕IEC:9899-1999),以循序渐进的方式介绍了C语言编程方面知识,并提供了丰富的实例和大量的练习。通过学习实例,并将所学的知识用于完成练习,读者将逐步了解、熟悉并精通C语言。《21天学通C语言(第6版•修订版)》包括四周的课程。第一周的课程介绍了C语言程序的基本元素,包括变量、常量、语句、表达式、函......一起来看看 《21天学通C语言》 这本书的介绍吧!