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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM