//根据format字符串格式化date值。下列修饰符可以被用在format字符串中: 
//%M 月名字(January……December) 
//%W 星期名字(Sunday……Saturday) 
//%D 有英语前缀的月份的日期(1st, 2nd, 3rd, 等等。) 
//%Y 年, 数字, 4 位 
//%y 年, 数字, 2 位 
//%a 缩写的星期名字(Sun……Sat) 
//%d 月份中的天数, 数字(00……31) 
//%e 月份中的天数, 数字(0……31) 
//%m 月, 数字(01……12) 
//%c 月, 数字(1……12) 
//%b 缩写的月份名字(Jan……Dec) 
//%j 一年中的天数(001……366) 
//%H 小时(00……23) 
//%k 小时(0……23) 
//%h 小时(01……12) 
//%I 小时(01……12) 
//%l 小时(1……12) 
//%i 分钟, 数字(00……59) 
//%r 时间,12 小时(hh:mm:ss [AP]M) 
//%T 时间,24 小时(hh:mm:ss) 
//%S 秒(00……59) 
//%s 秒(00……59) 
//%p AM或PM 
//%w 一个星期中的天数(0=Sunday ……6=Saturday ) 
//%U 星期(0……52), 这里星期天是星期的第一天 
//%u 星期(0……52), 这里星期一是星期的第一天 
//%% 一个文字“%”。
/**
* 概览统计
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function overviewStatistical(Request $request)
{
$time_quantum=$request->input('time_quantum') ?? 'month';
$start=$request->input('start') ?? '2019-01-01';
$end=$request->input('end') ?? '2020-01-01'; $user_id=$request->user()->id;
$item_id=ImOrganize::where('user_id',$user_id)->value('id');
$item_id=28;
switch ($time_quantum){
case 'days':
$sort='%Y-%m-%d';
$size='days';
$data=$this->monthOverviewStatistical($item_id,$start,$end,$sort,$size);
break; case 'weeks':
$sort='%Y-%u';
$size='weeks';
$data=$this->monthOverviewStatistical($item_id,$start,$end,$sort,$size);
break;
default:
$sort='%Y-%m';
$size='months';
$data=$this->monthOverviewStatistical($item_id,$start,$end,$sort,$size);
} return response()->json($data)->setStatusCode(200);
} /**
* 粒度数据统计
* @param $item_id
* @param $start
* @param $end
* @return mixed
*/
public function monthOverviewStatistical($item_id,$start,$end,$sort,$size)
{
//项目关注人数走势(单位千人)
$data['user_item']=$this->getTotalMonthItem($item_id,$start,$end,$sort,$size); //项目关联社区id
$group_id=Group::where('im_organize_id',$item_id)->value('id');
if(!$group_id){
$data['group_members']=0;
}else{
//社区加入人数统计(单位千人)
$data['group_members'] =$this->getTotalMonthGroup($group_id,$start,$end,$sort,$size) ;
} //问答活跃度(单位千条)
$topic_id=Topic::where('im_organize_id',$item_id)->value('id');
$questions_id=QuestionTopic::where('topic_id',$topic_id)->pluck('question_id')->toArray();
if(!$questions_id){
$data['topic_answers']=0;
}else{
//话题问答人数(单位千人)
$data['topic_answers'] =$this->getTotalMonthTopic($questions_id,$start,$end,$sort,$size) ;
} return $data;
} /**
* 项目关注人数走势(单位千人)
* @param int $item_id
* @param $start
* @param $end
* @return mixed
*/
public function getTotalMonthItem($item_id,$start,$end,$sort='%Y-%m',$size='month'){ // $arr = DB::select('select count(user_id)/1000 as "user_count",date_format(created_at,\'%y%m\') as month from user_item where im_organize_id='.$item_id.' group by date_format(created_at,\'%y%m\')'); $query = DB::table('user_item')
->select(DB::raw("count(user_id)/1000 as user_count,date_format(created_at,'$sort') as $size"))
->groupBy(DB::raw("date_format(created_at,'$sort')"))
->where('im_organize_id',$item_id)
->where('created_at','>',Carbon::parse($start))
->where('created_at','<',Carbon::parse($end))
->get(); return $query;
} /**
* 社区加入人数统计(单位千人)
* @param $group_id
* @param $start
* @param $end
* @param string $month
* @param string $size
* @return mixed
*/
public function getTotalMonthGroup($group_id,$start,$end,$sort='%Y-%m',$size='month'){ // $arr = DB::select('select count(user_id)/1000 as "user_count",date_format(created_at,\'%y%m\') as month from group_members where group_id='.$group_id.' group by date_format(created_at,\'%y%m\')'); $query = DB::table('group_members')
->select(DB::raw("count(user_id)/1000 as user_count,date_format(created_at,'$sort') as $size"))
->groupBy(DB::raw("date_format(created_at,'$sort')"))
->where('group_id',$group_id)
->where('created_at','>',Carbon::parse($start))
->where('created_at','<',Carbon::parse($end))
->get(); return $query;
} /**
* 问答活跃度
* @param $questions_id
* @param $start
* @param $end
* @param string $sort
* @param string $size
* @return mixed
*/
public function getTotalMonthTopic($questions_id,$start,$end,$sort='%Y-%m',$size='month'){ // $arr = DB::select('select count(user_id)/1000 as "user_count",date_format(created_at,\'%y%m\') as month from group_members where group_id='.$group_id.' group by date_format(created_at,\'%y%m\')'); $query = DB::table('answers')
->select(DB::raw("count(id)/1000 as answers_count,date_format(created_at,'$sort') as $size"))
->groupBy(DB::raw("date_format(created_at,'$sort')"))
->whereIn('questions_id',$questions_id)
->where('created_at','>',Carbon::parse($start))
->where('created_at','<',Carbon::parse($end))
->get(); return $query;
}

laravel 统计数据的更多相关文章

  1. sql不重复的查找统计数据(经典)

    例表如下: 表名:MYTEST TID    COL1    COL2     COL3 1           1           A            A2           1     ...

  2. (转载)MySQL 统计数据行数 Select Count

    (转载)http://www.5idev.com/p-php_mysql_select_count.shtml 统计数据行数 SELECT COUNT() FROM 语法用于从数据表中统计数据行数. ...

  3. mysql按月,按日分组统计数据

    group by DATE_FORMAT(createtime,'%Y-%m');//按月统计数据 group by DATE_FORMAT(createtime,'%Y-%m-%d');//按天统计 ...

  4. HDU 2017 一系列统计数据

    一系列统计数据 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Su ...

  5. Oracle 收集统计数据

    查看最新用户表统计信息 select owner,table_name,last_analyzed from dba_tables where owner not like '%SYS%' order ...

  6. 统计数据方面SQL与HQL

    因为HQL是面向对象的,所以对于统计数据方面使用HQL时不合适的,其实HQL最终还是会转化成SQL语句,项目里使用HQL语句应该是为了标准规范化. 统计的数据:同一个表,同一个字段,不同属性,统计不同 ...

  7. Pandas日期数据处理:如何按日期筛选、显示及统计数据

    前言 pandas有着强大的日期数据处理功能,本期我们来了解下pandas处理日期数据的一些基本功能,主要包括以下三个方面: 按日期筛选数据 按日期显示数据 按日期统计数据 运行环境为 windows ...

  8. laravel 查询数据返回的结果

    laravel查询数据返回的结果 在插入数据库的时候,发现查询数据返回的结果是一个对象;即使是空数据 返回的不是true或者false 那么要判断该结果是否查询有结果 该如果呢? 学习源头: http ...

  9. MySQL实现按天统计数据的方法

    一.首先生成一个日期表,执行SQL如下: CREATE TABLE num (i int); ), (), (), (), (), (), (), (), (), (); CREATE TABLE i ...

随机推荐

  1. Java基础_0305:简单Java类

    简单Java类 简单Java类是一种在实际开发之中使用最多的类的定义形式,在简单Java类中包含有类.对象.构造方法.private封装等核心概念的使用,而对于简单Java类首先给出如下的基本开发要求 ...

  2. MeEclipse搭建SSH框架之———大体框架

    必备:MyEclipse软件,SSH需要的jar包,数据库,连接数据库的驱动jar包 先搭建大体框架,再加别的东西,要不都不知道哪里错了 一.新建web项目 MyEclipse左边右键--->N ...

  3. struts2简单入门-关于Result标签Type属性的说明

    Result标签 作用 当action执行完毕,后要返回什么样的视图. Type属性 决定返回的是什么视图. struts-default.xml的Type属性的定义 <result-types ...

  4. 基于【字节】操作的IO接口:InputStream、OutputStream

    InputStream 参考链接:对java中FileInputStream.BufferInputStream的理解 /** * Author:Mr.X * Date:2017/10/9 17:11 ...

  5. vue 学习笔记—Es6

    // 第一部分 /* console.log(a+'c'); var a = 1; console.log(b+'c'); let b =1; */ // 上述代码 left定义报错 原因: /* v ...

  6. 移植busybox构建最小根文件系统

    Busybox:瑞士军刀,里面装有很多小命令. STEP 1:构建目录结构  创建根文件系统目录,主要包括以下目录/dev  /etc /lib  /usr  /var /proc /tmp /hom ...

  7. keepalived 的某台vip连接不通【原创】

    keepalived 的某台vip连接不通,vip可以漂移到这台服务器,但是ping vip不通,telnet vip 3306服务也不通,但是telnet 服务器真实物理IP 3306是通的. 切换 ...

  8. PEP525--异步生成器

    [译] PEP 525--异步生成器 PEP原文:https://github.com/python/peps/blob/master/pep-0525.txt 创建日期:2016-07-18 译者 ...

  9. Windows PowerShell 入門(2)-基本操作編 2

    前回に引き続きMicrosoftが提供している新しいシェル.Windows Power Shellの基本操作方法を学びます.基本操作編第2弾の今回は.パイプの使用方法を中心としたコマンドレットの操作方 ...

  10. win10 python27pyhton36共存

    先前安装了python36 然后安装python27,安装步骤如下 1. 到官网下载https://www.python.org/downloads/windows/,我的是win10 64位,选择了 ...