效果实现:
use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Pagination\Paginator; /** * 注册途径来源分布 * @param Request $request * @return $this */ public function RegisterSourceView(Request $request){ $qq = ServiceUtils::REGISTER_PLATFORM_QQ; $wx = ServiceUtils::REGISTER_PLATFORM_WX; $sina = ServiceUtils::REGISTER_PLATFORM_SINA; $phone = ServiceUtils::REGISTER_PLATFORM_SMS; $pageSize=ConstantUtils::PAGE_SIZE; $data['start_time'] = $request->input('start_time', date('Y-m-d 00:00:00',strtotime("-15 day"))); $data['end_time']= $request->input('end_time', date('Y-m-d 23:59:59')); $start_month = date('Ym',strtotime($data['start_time'])); $end_month = date('Ym',strtotime($data['end_time'])); $table_prefix = 'd_user_register'; //获得查询表集合 $select_set = []; for($i=$start_month;$i<=$end_month;$i++){ $select_set[] = intval($i); } //获得已有表集合 $table_prefix_length = strlen($table_prefix); $tables = DB::connection('log')->select("show tables like 'd_user_register%'"); $register_tables_set = []; foreach($tables as $key=>$value){ $value = (array)$value; $table = $value['Tables_in_dingdlog (d_user_register%)']; $res = (int)substr($table,$table_prefix_length); array_push($register_tables_set,$res); } $register_tables_set = array_filter($register_tables_set); sort($register_tables_set); //获取最终查询表交集 $register_tables = array_values(array_intersect($register_tables_set,$select_set)); $register_data = []; //循环查询 if(count($register_tables)<=1){ //一个月 $register_data = DB::connection('log')->table($table_prefix.$register_tables[0])->select(DB::raw("DATE_FORMAT(time,'%Y%m%d') as day,sum(case authorizationType when ".$wx." then 1 else 0 end) as wx,sum(case authorizationType when ".$qq." then 1 else 0 end) as qq,sum(case authorizationType when ".$sina." then 1 else 0 end) as xlwb,sum(case authorizationType when ".$phone." then 1 else 0 end) as phone ")) ->where('time','>=',$data['start_time']) ->where('time','<=',$data['end_time']) ->groupBy('day') ->get(); }else{ //多个月 //确定开始和结束时间 $first_table = current($register_tables); $end_table = end($register_tables); $first = date('Y-m-d 00:00:00',strtotime($first_table.'01')); $end = date('Y-m-d 23:59:59',strtotime($end_table."01 +1month -1day")); foreach($register_tables as $k=>$v){ if($v==$first_table){ if(strtotime($data['start_time'])>strtotime($first)){ $list = DB::connection('log')->table($table_prefix.$v)->select(DB::raw("DATE_FORMAT(time,'%Y%m%d') as day,sum(case authorizationType when ".$wx." then 1 else 0 end) as wx,sum(case authorizationType when ".$qq." then 1 else 0 end) as qq,sum(case authorizationType when ".$sina." then 1 else 0 end) as xlwb,sum(case authorizationType when ".$phone." then 1 else 0 end) as phone "))->where('time','>=',$data['start_time'])->groupBy('day')->get(); }else{ $list = DB::connection('log')->table($table_prefix.$v)->select(DB::raw("DATE_FORMAT(time,'%Y%m%d') as day,sum(case authorizationType when ".$wx." then 1 else 0 end) as wx,sum(case authorizationType when ".$qq." then 1 else 0 end) as qq,sum(case authorizationType when ".$sina." then 1 else 0 end) as xlwb,sum(case authorizationType when ".$phone." then 1 else 0 end) as phone "))->groupBy('day')->get(); } }elseif($v==$end_table) { if(strtotime($data['end_time'])<strtotime($end)){ $list = DB::connection('log')->table($table_prefix.$v)->select(DB::raw("DATE_FORMAT(time,'%Y%m%d') as day,sum(case authorizationType when ".$wx." then 1 else 0 end) as wx,sum(case authorizationType when ".$qq." then 1 else 0 end) as qq,sum(case authorizationType when ".$sina." then 1 else 0 end) as xlwb,sum(case authorizationType when ".$phone." then 1 else 0 end) as phone "))->where('time','<=',$data['end_time'])->groupBy('day')->get(); }else{ $list = DB::connection('log')->table($table_prefix.$v)->select(DB::raw("DATE_FORMAT(time,'%Y%m%d') as day,sum(case authorizationType when ".$wx." then 1 else 0 end) as wx,sum(case authorizationType when ".$qq." then 1 else 0 end) as qq,sum(case authorizationType when ".$sina." then 1 else 0 end) as xlwb,sum(case authorizationType when ".$phone." then 1 else 0 end) as phone "))->groupBy('day')->get(); } }else{ $list = DB::connection('log')->table($table_prefix.$v)->select(DB::raw("DATE_FORMAT(time,'%Y%m%d') as day,sum(case authorizationType when ".$wx." then 1 else 0 end) as wx,sum(case authorizationType when ".$qq." then 1 else 0 end) as qq,sum(case authorizationType when ".$sina." then 1 else 0 end) as xlwb,sum(case authorizationType when ".$phone." then 1 else 0 end) as phone "))->groupBy('day')->get(); } array_push($register_data,$list); } } $result = []; if(count($register_tables)<=1){ $result = $register_data; }else{ foreach($register_data as $k=>$v){ foreach($v as $j){ array_push($result,$j); } } } //倒序显示 rsort($result); //分页显示 $perPage = $pageSize; if ($request->has('page')) { $current_page = $request->input('page'); $current_page = $current_page <= 0 ? 1 :$current_page; } else { $current_page = 1; } $item = array_slice($result, ($current_page-1)*$perPage, $perPage); //注释1 $total = count($result); $result =new LengthAwarePaginator($item, $total, $perPage, $current_page, [ 'path' => Paginator::resolveCurrentPath(), //注释2 'pageName' => 'page', ]); return view('chart/registerSourceView') ->with('data', $data) ->with('register_Source_Data',$result); } <!DOCTYPE html> <html lang="zh-cn"> @include('layouts.head') <body> <div class="container-fluid"> <div class="panel panel-default"> <div class="panel-heading"> 邀请注册 </div> <div class="panel-body"> <form action="{{action('Home\ChartController@inviteRegisterView')}}" method="post" role="form"> <div class="row"> <div class="col-md-6 form-inline"> <div class="form-group form-inline"> <label for="">开始时间</label> <input type="text" name="start_time" class="form-control form_date" value="{{$data['start_time']}}" readonly placeholder="请输入id"/> </div> <div class="form-group form-inline"> <label for="">结束时间</label> <input type="text" name="end_time" class="form-control form_date" value="{{$data['end_time']}}" readonly placeholder="请输入id"/> </div> </div> <div class="col-md-3"> <label for=""> </label> <div class="form-group"> <input type="submit" class="btn btn-sm btn-primary" value="查询"/> {{--<input type="submit" class="btn btn-sm btn-primary" value="导出"/>--}} </div> </div> </div> </form> </div> </div> <table class="table table-responsive table-bordered"> <thead> <th>日期</th> <th>新增总人数</th> <th>邀请注册人数</th> </thead> <tbody> @if($result) @foreach($result as $key=>$value) <tr> <td>{{$value->day}}</td> <td>{{$value->register_total}}</td> <td>{{$value->register_total-$value->self}}</td> </tr> @endforeach @else <tr> <td colspan="4">暂无数据</td> </tr> @endif </tbody> </table> <nav class="pull-right"> @if($result) {!! $result->appends($data)->render() !!} @endif </nav> </div> <script type="text/javascript"> $('.form_date').datetimepicker({ language: 'zh-CN', /*加载日历语言包,可自定义*/ weekStart: 1, /*星期*/ todayBtn: 0, /*当天*/ autoclose: true,//选中之后自动隐藏日期选择框 todayHighlight: 1, /*今天高亮显示*/ startView: 2, /*4年3月2日1小时*/ minView: 2, /*0分1小时2天*/ format: 'yyyy-mm-dd', forceParse: 0, showMeridian:true }); </script> </body> </html>