laravel实现按月或天或小时统计mysql数据的方法


Posted in PHP onOctober 09, 2019

在PHP里怎么比较简单的实现按时间(如按月,按天,按小时)来统计表里的数据呢?

如:要实现获取下图曲线图数据(ps:当然也可能是柱状图等,数据都是一样的),默认获取七天内的数据,点击今天,7天,15天,30天可任意切换,其中今天是按小时统计.

不过我的实现方法有一个小缺点,当某个小时内是没有数据的,那么该小时不会出现,不过这个应该可以通过前端的形式弥补

好了,废话不多说,上图上代码!

laravel实现按月或天或小时统计mysql数据的方法

1. 控制器内容

/**
   * [getsellerdata 获取某时间段内商户结算查询数据]
   * @param Request $request [description] start:起始时间 end:结束时间 
   * @return [type]      [description]
   */
  public function getsellerqudata(Request $request){
    $data = $this->dataanalysis->getSellerQuData($request->start,$request->end);
    return $data;    
  }

2. 库文件内容

/**
   * [getSellerQuData 获取商户结算数据 曲线]
   * @param [string] $start [起始时间]2017-08
   * @param [string] $end  [结束时间]
   * @return [type]    [description]
   */
  public function getSellerQuData($name,$start,$end){

    //计算时间差值,以决定格式化时间格式
    $diff = strtotime($end)-strtotime($start);

    //分组条件 1天内按小时分组,否则按天/月分组
    //86400/1天 2678400/1月
    if($diff<86400&&$diff>0){
      $sort = '%H';
    }elseif($diff<2678400){
      $sort = '%Y-%m-%d';
    }else{
      $sort = '%Y-%m';
    }
    //把数据添加时间按格式化时间分组求和,求和分两种,一种是直接求和,一种是满足case when条件的数据求和
    $query = DB::table('user_withdrawals as w')->select(DB::raw("FROM_UNIXTIME(created_at,'{$sort}') as thedata,sum(case when w.cash_type = 1 then w.money end) as xiabi,sum(case when w.cash_type = 2 then w.money end) as online,sum(w.money) as alls"))->groupBy(DB::raw("FROM_UNIXTIME(created_at,'{$sort}')"));

    //条件筛选 某时间段内
    if( !empty($start) ){
      $query->whereRaw('w.created_at >= ?',strtotime($start));
    }
    if( !empty($end) ){
      $query->whereRaw('w.created_at <= ?',strtotime($end));
    }

    $data = $query->get();

    return $data;
  }

以上这篇laravel实现按月或天或小时统计mysql数据的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php中常用编辑器推荐
Jan 02 PHP
php在多维数组中根据键名快速查询其父键以及父键值的代码
May 07 PHP
PHP源码之explode使用说明
Aug 05 PHP
编写PHP脚本过滤用户上传的图片
Jul 03 PHP
android上传图片到PHP的过程详解
Aug 03 PHP
合格的PHP程序员必备技能
Nov 13 PHP
利用php-cli和任务计划实现刷新token功能的方法
May 03 PHP
PHP5.0~5.6 各版本兼容性cURL文件上传功能实例分析
May 11 PHP
如何优雅的使用 laravel 的 validator验证方法
Nov 11 PHP
RSA实现JS前端加密与PHP后端解密功能示例
Aug 05 PHP
PHP Ajax跨域问题解决方案代码实例
Aug 01 PHP
php在linux环境中如何使用redis详解
Dec 15 PHP
laravel5.5添加echarts实现画图功能的方法
Oct 09 #PHP
使用laravel和ECharts实现折线图效果的例子
Oct 09 #PHP
Laravel统计一段时间间隔的数据方法
Oct 09 #PHP
浅谈PHP5.6 与 PHP7.0 区别
Oct 09 #PHP
laravel按天、按小时,查询数据的实例
Oct 09 #PHP
laravel多条件查询方法(and,or嵌套查询)
Oct 09 #PHP
Laravel find in set排序实例
Oct 09 #PHP
You might like
深入php之规范编程命名小结
2013/05/15 PHP
php输出指定时间以前时间格式的方法
2015/03/21 PHP
php实现插入数组但不影响原有顺序的方法
2015/03/27 PHP
PHP获取二叉树镜像的方法
2018/01/17 PHP
PHP字符串和十六进制如何实现互相转换
2020/07/16 PHP
取得父标签
2006/11/14 Javascript
javascript生成/解析dom的CDATA类型的字段的代码
2007/04/22 Javascript
javascript 隐藏/显示指定的区域附HTML元素【legend】用法
2010/03/05 Javascript
extjs 04_grid 单击事件新发现
2012/11/27 Javascript
jQuery选择器简明总结(含用法实例,一目了然)
2014/04/25 Javascript
director.js实现前端路由使用实例
2015/02/03 Javascript
理解javascript封装
2016/02/23 Javascript
Vue.js实战之通过监听滚动事件实现动态锚点
2017/04/04 Javascript
jQuery实现一个简单的验证码功能
2017/06/26 jQuery
AngularJS实现select的ng-options功能示例
2017/07/12 Javascript
细说webpack源码之compile流程-rules参数处理技巧(1)
2017/12/26 Javascript
jQuery实现页码跳转式动态数据分页
2017/12/31 jQuery
Vue自定义属性实例分析
2019/02/23 Javascript
浅谈redux, koa, express 中间件实现对比解析
2019/05/23 Javascript
JS实现动态无缝轮播
2020/01/11 Javascript
[01:01:01]完美世界DOTA2联赛循环赛 GXR vs FTD BO2第一场 10.29
2020/10/29 DOTA
Python的函数的一些高阶特性
2015/04/27 Python
Python首次安装后运行报错(0xc000007b)的解决方法
2016/10/18 Python
numpy中的ndarray方法和属性详解
2019/05/27 Python
对Python3之方法的覆盖与super函数详解
2019/06/26 Python
Django 响应数据response的返回源码详解
2019/08/06 Python
Pytorch 抽取vgg各层并进行定制化处理的方法
2019/08/20 Python
Python GUI编程学习笔记之tkinter中messagebox、filedialog控件用法详解
2020/03/30 Python
Python 删除List元素的三种方法remove、pop、del
2020/11/16 Python
Pytorch自定义Dataset和DataLoader去除不存在和空数据的操作
2021/03/03 Python
兼职学生的自我评价
2013/11/24 职场文书
自主招生自荐信指南
2014/02/04 职场文书
秦始皇兵马俑导游词
2015/02/02 职场文书
项目经理助理岗位职责
2015/04/13 职场文书
CSS实现多个元素在盒子内两端对齐效果
2021/03/30 HTML / CSS
python实现学员管理系统(面向对象版)
2022/06/05 Python