-
背景
今天在進行後臺數據監控時;
需要對一天24小時的下單量進行時間段的統計;
但是下單時間字段pay_time
選取的是timestamp
類型;
此時需要進行時間段的數據分組剝離,在此做一下實現方式,請多指教 … -
環境
框架:ThinkPHP5.1.2
系統:nginx/win10 、phpStudy2017
實現方式
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();
- 即對應的原生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
- 得到的數據打印如下:
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;
}
}
}
4. 數據整合後,展示效果如下:
- 參考文章:
-MySQL substring()函數
-mysql 獲取某個時間段每一天的統計數據