您现在的位置是:网站首页> php专栏 thinkphp

tp5实现按月查询价格的平均值

亦然2019-06-03 23:58:53thinkphp人已围观

简介最近有项目要实现统计最近几个月的售价平均值,并需要按类别分组,在此记录一下。

 public function getAvg($type,$where){
        if($type == 3){
            //商铺
            $shop_id  = db('house_type')->where('name','like','%商铺%')->column("id");    ;
            $shop = implode(',',$shop_id);
            $where['house_type'] = ['in',$shop];
        }else{
            $where['type'] = $type;
        }
        $beginThismonth = strtotime(date('Y-m-01 00:00:00',strtotime('-4 month')));
        $endThismonth = mktime(23,59,59,date('m'),date('t'),date('Y'));
        $array = self::getMonthArr($beginThismonth,$endThismonth);
        $db  = Db::table('h_house')
                ->field('FROM_UNIXTIME(create_time,"%m") as time,FROM_UNIXTIME(create_time,"%Y-%m") as avg_time,cast(avg(sold_price) AS DECIMAL(10,0)) as avgPrice')
                ->where($where)
                ->whereTime('create_time', 'between', [$beginThismonth, $endThismonth])
                ->group('avg_time')
                ->select();
        //分组没有数据的 追加0
        if(count($db) < 5){
            $arr = $array;
            foreach ($db as $key => $value) { 
                $time[] = $value['avg_time'];
            } 
            $ex = array_diff($arr,$time);
            foreach ($ex as $key => $value) {
                    $month = explode('-',$value);
                    array_push($db,array('time'=>$month[1],'avg_time'=>$value,'avgPrice'=>0));
                }
        }
        //数组排序
        // 取得列的列表
        foreach ($db as $key => $row)
        {
            $volume[$key]  = $row['volume'];
            $edition[$key] = $row['edition'];
        }

        array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $db);
        return $db;
    }



   /**
     * 生成从开始月份到结束月份的月份数组
     * @param unknown_type $start
     * @param unknown_type $end
     */
    function getMonthArr($start, $end)
    {
        $start    = empty($start) ? date('Y-m',strtotime('-1 month')) : $start;
        $end    = empty($end) ? date('Y-m') : $end;

        //转为时间戳
        $st = $start;
        $et = $end;

        $t = $st;
        $i = 0;
        while($t <= $et)
        {
            //这里累加每个月的的总秒数 计算公式:上一月1号的时间戳秒数减去当前月的时间戳秒数
            //看不懂自己想去
            $d[$i] = trim(date('Y-m',$t),' ');
            $t += strtotime('+1 month', $t)-$t;
            $i++;
        }
        return $d;
    }
php

很赞哦!()

上一篇: 这已经是第一篇了!

下一篇:thinkphp ajax请求跨域问题解决

亦然

亦然(共32篇文章)

愿你我既可以朝九晚五,也可以浪迹天涯;愿你我既可以拈花把酒,也能围炉诗书茶。