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

moTzxx 最后发布于2019-11-12 11:27:20 阅读数 236 收藏
展开
背景
今天在进行后台数据监控时;
需要对一天24小时的下单量进行时间段的统计;
但是下单时间字段 pay_time 选取的是 timestamp 类型;
此时需要进行时间段的数据分组剥离,在此做一下实现方式,请多指教 …

环境

框架:ThinkPHP5.1.2
系统:nginx/win10 、phpStudy2017
1
2
实现方式
1. 首先,考虑到使用的是 group分组技巧;
那么就必须要将 pay_time 中记录的字段数据进行 24时的定位切分;
这里可以用到 substring() 方法的支持 【字段取值举例:2019-08-23 09:25:09】
2. 以我的 ThinkPHP5框架的代码规范
源码书写如下:
$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();
1
2
3
4
5
6
7
即对应的原生sql语句为:
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
1
2
3
4
5
得到的数据打印如下:

3. 之后就是对得到的数据进一步的整理
以我使用 ECharts图表库 进行数据展示为例,那么我的处理方式如下:
$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;
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
4. 数据整合后,展示效果如下:


参考文章:
- MySQL substring()函数
- mysql 获取某个时间段每一天的统计数据
————————————————
版权声明:本文为CSDN博主「moTzxx」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u011415782/article/details/103024669

posted @ 2020-02-02 15:31  阿波罗任先生  阅读(1645)  评论(0编辑  收藏  举报