最近收到一个请求:1.请求做一些大屏数据展示,数据可视化,一些用户数据(比如评论数,投诉数)在可视化界面,如果当天/周/月没有数据,则显示0,形成折线图背景:使用Laravel6.0框架开发单独统计table,并统计点击次数,评论次数,投诉次数(数据量大时,不要全量扫描业务表。)开发:使用Sql语句查找这些数据还是比较容易的,但是在没有数据的情况下给数据加0就比较困难了。在用foreach一一比较的时候,感觉效率太低了,于是找到了如下方法代码:1.显示最近7天的数据$params=$request->all();$数组=[];$天=7;对于($i=$day-1;0<=$i;$i--){$array[]=date('Y-m-d00:00:00',strtotime('-'.$i.'day'));$nums[]=0;}$result=DB::table('data_insert_days')->select([DB::raw("FROM_UNIXTIME(UNIX_TIMESTAMP(time),'%Y-%m-%d')asdate"),DB::raw('sum(number)AScount'),])->whereBetween('time',[Carbon::yesterday()->subDays(7),Carbon::now()])->groupBy("date")->orderBy('date','asc')->get()->toArray();array_walk($result,function($value,$key)use($array,&$nums){$index=array_search($value->date,$array);$nums[$index]=$value->count;});$data=['date'=>$array,'count'=>$nums];那么最终显示的数据结构为{"data":{“日期”:[“2020-05-19”,“2020-05-20”,“2020-05-21”,“2020-05-22”,“2020-05-23”,“2020-05-24","2020-05-25"],"count":["36","11","45","49","38","39","1"]},"成功":true,"Message":{"Code":0,"Content":"操作成功"}}最近6周的数据展示$today_week=date('W',time());$start_week=$today_week-7;对于($i=$start_week+1;$i<=$today_week;$i++){$array[]=$i;$nums[]=0;}$result=DB::table('data_insert_days')->select(DB::raw('weekofyear(time)asw,SUM(number)ast'))->where("site_id",$params['site_id'])->whereRaw('time>DATE_SUB(now(),INTERVAL7WEEK)')->groupBy(DB::raw('weekofyear(time)'))->get()->toArray();array_walk($result,function($value,$key)use($array,&$nums){$index=array_search($value->w,$array);$nums[$index]=$value->t;});$data=['w'=>$array,'t'=>$nums];以此类推,可以计算出最近6个月的数据
