thinkphp mysql count_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']."
";

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值