laravel 统计数据

    //根据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;
    }

转载于:https://www.cnblogs.com/sgm4231/p/10374796.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值