前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >ThinkPHP5 (mySQL) 统计各个时间段内的订单量

ThinkPHP5 (mySQL) 统计各个时间段内的订单量

作者头像
泥豆芽儿 MT
发布2020-01-13 17:16:10
发布2020-01-13 17:16:10
2K00
代码可运行
举报
运行总次数:0
代码可运行
  • 背景 今天在进行后台数据监控时; 需要对一天24小时的下单量进行时间段的统计; 但是下单时间字段 pay_time 选取的是 timestamp 类型; 此时需要进行时间段的数据分组剥离,在此做一下实现方式,请多指教 …
  • 环境
代码语言:javascript
代码运行次数:0
复制
	框架:ThinkPHP5.1.2
	系统:nginx/win10	、phpStudy2017

实现方式

1. 首先,考虑到使用的是 group分组技巧;
  • 那么就必须要将 pay_time 中记录的字段数据进行 24时的定位切分; 这里可以用到 substring() 方法的支持 【字段取值举例:2019-08-23 09:25:09
2. 以我的 ThinkPHP5框架的代码规范
  • 源码书写如下:
代码语言:javascript
代码运行次数:0
复制
$res = Db::name('order_goods og')
            ->field("substring(pay_time,12,2) hour,count(og.id) count")
            ->join("order_infos oi","oi.order_id = og.order_id")
            ->where([ ["pay_status","=",1]])
            ->group('hour')
            ->order('hour','asc')
            ->select();
  • 即对应的原生sql语句为:
代码语言:javascript
代码运行次数:0
复制
SELECT substring(pay_time,12,2) hour,count(og.id) count FROM tp5_xorder_goods og 
INNER JOIN `tp5_xorder_infos` `oi` ON `oi`.`order_id`=`og`.`order_id` 
WHERE `pay_status` = 1 
GROUP BY `hour` 
ORDER BY `hour` ASC
  • 得到的数据打印如下:
3. 之后就是对得到的数据进一步的整理
  • 以我使用 ECharts图表库 进行数据展示为例,那么我的处理方式如下:
代码语言:javascript
代码运行次数:0
复制
$timeRes = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
        foreach ($timeRes as $key => $value){
            foreach ($res as $key2 => $value2){
                $hour = intval($value2['hour']);
                if ($key == $hour){
                    $timeRes[$key] = $value2['count'];
                    //echo "hour:".$hour.";key:".$key.";count:".$value2['count']."<br/>";
                    break;
                }else{
                    continue;
                }
            }
        }
4. 数据整合后,展示效果如下:
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/11/12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实现方式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档