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中的文本处理库:Phonetic

    随着PHP 8.0的发布,很多人都在关注它的新特性。其中一个备受瞩目的特性是它的文本处理库,Phonetic。这个库提供了一些有用的方法,如音标转换、拼音转换和近似字符串匹配。在本文中,我们将深入探讨这个库的功能和…

    2023年5月18日
    01
  • 解决PHP里大量数据循环时内存耗尽问题的方法

    相关学习推荐:php编程(视频) 最近在开发一个PHP程序时遇到了下面的错误: 错误信息显示允许的最大内存已经耗尽。遇到这样的错误起初让我很诧异,但转眼一想,也不奇怪,因为我正在开发的这个程序是要用一个forea…

    2022年6月18日
    0131
  • php如何设定启用php缩写(php.ini、short_open_tag)

    php 设定启用 php缩写(php.ini、short_open_tag) 本教学使用环境介绍 伺服器端:Ubuntu 18.04 LTS 资料库:Mariadb 10.1.34(Mysql) 语言版本:php 7.3 本机端:MacOS High Sierra 启用 php 缩写能节省一些写法…

    2022年6月19日
    0123
  • PHP与数据库日志管理的集成

    随着互联网技术的发展,越来越多的网站或应用程序需要在后台对数据库进行管理和维护。而在这个过程中,如何记录和分析日志是非常重要的一环。PHP作为最流行的Web开发语言之一,在日志记录方面也拥有着强大的功能。…

    2023年5月19日
    01
  • PHP连接MySQL数据库操作实现

    方法一:普通方法(面向过程) 首先,先做出如下假设(也适用与方法二和方法三) $username=your_name; $userpass=your_pass; $dbhost=localhost; $dbdatabase=your_database; 下面是关键步骤: //生成一个连接 $db…

    2022年6月18日
    0127
  • Cookie基本使用(增删改查)

    创建cookie(增加) setcookie();setcookie有7个参数: 参数1:保存的cookie变量名称 参数2:变量对应的值 参数3:cookie文件的有效期 读取cookie的数据 参数4:有效路径 默认情况只允许访问当前目录、当前目录子目…

    2018年9月13日 PHP自学教程
    0263
  • PHP实现即时通讯聊天消息发送功能。

    随着互联网的不断发展,即时通讯已经成为现代社会日常沟通的主要形式,因此实现即时通讯聊天消息发送功能成为了各个网站和应用程序的必备特性。本文将介绍PHP实现即时通讯聊天消息发送功能的步骤和注意事项。 一、…

    2023年5月23日
    026
  • PHP中的数据抓取和爬虫技术。

    随着移动互联网和Web2.0时代的发展,人们越来越需要获取和分析互联网上的数据。而在这个过程中,数据抓取和爬虫技术成为了必不可少的工具。在众多语言中,PHP作为一种脚本语言,也能够实现较为简单和高效的数据抓取…

    2023年5月28日
    06

联系我们

QQ:951076433

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