PHP+MySQL实现对一段时间内每天数据统计优化操作实例

 更新时间:2018年03月19日 14:16:03   作者:进击的码农_Jatham  
这篇文章主要介绍了PHP+MySQL实现对一段时间内每天数据统计优化操作,结合具体实例形式分析了php针对mysql查询统计相关优化操作技巧,需要的朋友可以参考下
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

本文实例讲述了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程序设计有所帮助。

相关文章

  • PHP中通过getopt解析GNU C风格命令行选项

    PHP中通过getopt解析GNU C风格命令行选项

    这篇文章主要介绍了PHP中通过getopt解析GNU C风格命令行选项,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • Symfony2安装第三方Bundles实例详解

    Symfony2安装第三方Bundles实例详解

    这篇文章主要介绍了Symfony2安装第三方Bundles的方法,结合实例形式分析了Symfony2通过composer来安装Bundle的具体步骤与相关技巧,需要的朋友可以参考下
    2016-02-02
  • smarty学习笔记之常见代码段用法总结

    smarty学习笔记之常见代码段用法总结

    这篇文章主要介绍了smarty学习笔记之常见代码段用法,结合实例形式总结分析了Smarty常见代码段的含义与使用方法,需要的朋友可以参考下
    2016-03-03
  • Yii实现自动加载类地图的方法

    Yii实现自动加载类地图的方法

    这篇文章主要介绍了Yii实现自动加载类地图的方法,涉及Yii加载类的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-04-04
  • PHP正在进行时-变量详解及字符串动态插入变量

    PHP正在进行时-变量详解及字符串动态插入变量

    这篇文章主要介绍了PHP正在进行时-变量详解及字符串动态插入变量的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-12-12
  • ThinkPHP下表单令牌错误与解决方法分析

    ThinkPHP下表单令牌错误与解决方法分析

    这篇文章主要介绍了ThinkPHP下表单令牌错误与解决方法,较为详细的分析了thinkPHP表单令牌的原理、配置、错误原因与相应的解决方法,需要的朋友可以参考下
    2017-05-05
  • php添加数据到xml文件的简单例子

    php添加数据到xml文件的简单例子

    下面小编就为大家带来一篇php添加数据到xml文件的简单例子。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • 基于PHP中的常用函数回顾

    基于PHP中的常用函数回顾

    以下是对PHP中的常用函数进行了详细的分析介绍,需要的朋友可以参考下
    2013-07-07
  • Discuz!X中SESSION机制实例详解

    Discuz!X中SESSION机制实例详解

    这篇文章主要介绍了Discuz!X中SESSION机制,以实例形式较为详细的分析了Discuz!X中SESSION机制的原理与数据库操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-09-09
  • PHP Opcache安装和配置方法介绍

    PHP Opcache安装和配置方法介绍

    这篇文章主要介绍了PHP Opcache安装和配置方法介绍,Opcache的安装需要在编译时加上enable-opcache即可,本文着重讲解配置方法,需要的朋友可以参考下
    2015-05-05

最新评论

?


http://www.vxiaotou.com