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次,响应时间会大大提高。

本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/6467.html

如有侵犯您的合法权益请发邮件951076433@qq.com联系删除

(0)
重蔚的头像重蔚管理团队
上一篇 2018年4月25日 09:24
下一篇 2018年4月27日 00:00

相关推荐

  • PHP8.0中的trait组合

    随着PHP语言的不断发展和升级,trait(特征)这个概念也越来越被程序员所认知和广泛应用。在PHP8.0版本中,trait组合成为了一个非常有价值的特性,对于编写高质量、易维护的代码来说,这是至关重要的。在过去的版本…

    2023年5月18日
    012
  • (实用篇)php中计算中文字符串长度、截取中文字符串的函数代码

    在PHP中,我们都知道有专门的mb_substr和mb_strlen函数,可以对中文进行截取和计算长度,但是,由于这些函数并非PHP的核心函数,所以,它们常常有可能没有开启。当然,如果是用的自己的服务器,则只要在php.ini中开…

    2016年10月25日
    0372
  • PHP中的设计模式有哪些?

    在开发Web应用程序的过程中,使用设计模式可以提高代码的可读性、可维护性和可扩展性。PHP是一种常用的Web编程语言,其也支持使用各种设计模式,本文将对常用的PHP设计模式进行介绍。单例模式(Singleton)单例模式…

    2023年5月17日
    04
  • 教你使用PHP实现查找你想要的附近人

    最近有个业务场景使用到了查找附近的人,于是查阅了相关资料,并对使用PHP实现相关功能的多种方式和具体实现做一篇技术总结,欢迎各位看官提出意见和纠错,下面开始进入正题:LBS(基于位置的服务)查找附近的人有个…

    2022年6月21日
    0128
  • 如何在PHP中实现复杂企业应用系统。

    随着企业规模的扩大,企业应用系统日益复杂。在这种情况下,如何在PHP中实现复杂企业应用系统的开发和维护,成为了每个PHP开发人员必须处理的问题。以下是一些实用的技巧和建议,帮助PHP开发人员更好地实现复杂的企…

    2023年5月22日
    00
  • PHP入门指南:ReactPHP编程框架。

    随着互联网技术的日益发展,Web应用程序已经渐渐成为了我们日常生活和工作中离不开的一部分。而PHP作为一个广泛应用于Web开发的语言,也在不断地发展和改进。本文将为你介绍一种基于PHP的编程框架——ReactPHP,帮助…

    2023年5月22日
    014
  • PHP数组常用函数总结

    一、数组操作的基本函数数组的键名和值 array_values($arr); 获得数组的值 array_keys($arr); 获得数组的键名 array_flip($arr); 数组中的值与键名互换(如果有重复前面的会被后面的覆盖) in_array("apple&qu…

    2022年6月20日
    0120
  • PHP中使用Redis实现Skiplist。

    在Web开发中,PHP和Redis都拥有着广泛的应用场景。PHP作为Web开发的主要语言,而Redis则是一个高性能的内存数据库。Redis拥有着快速的读写能力和灵活的数据结构,其功能的强大性能被广泛地应用于缓存、队列、实时通…

    2023年5月21日
    03

联系我们

QQ:951076433

在线咨询:点击这里给我发消息邮件:951076433@qq.com工作时间:周一至周五,9:30-18:30,节假日休息