thinkphp + mariadb order group 进行分组查询

19 篇文章 0 订阅
2 篇文章 0 订阅

http://www.au.test.cc/analysis/tracker/list?page=1&limit=15

http://www.au.test.cc/analysis/tracker/list?page=1&limit=50&searchParams=%7B%22create_time%22%3A%22%22%2C%22tableName%22%3A%22tracker_202011%22%2C%22product_name%7Cproduct_code%22%3A%22123%22%7D

controller


    /**
     * 信息列表
     */
    public function list()
    {
        // string(98) "( SELECT id,uuid,max(id) maxId,count(*) count FROM `analysis_tracker_202011` GROUP BY maxId desc )"
        $subQuery = $this->model
            ->name($this->model->getTableName())
            ->where($this->model->search())
            ->field('uuid,max(id) id,count(*) count')
            ->group('uuid')
            ->buildSql();

        // 结果集
        $sql = "SELECT * FROM analysis_tracker_202011 JOIN
{$subQuery} p USING(uuid,id) ORDER BY  id desc limit {$this->page},{$this->limit};";
        /**
         * 有条件
         * string(249) "SELECT * FROM analysis_tracker_202011 JOIN
         * ( SELECT uuid,max(id) id,count(*) count FROM `analysis_tracker_202011` WHERE
         * ( `product_name` LIKE '%123%' OR `product_code` LIKE '%123%' ) GROUP BY `uuid` ) p
         * USING(uuid,id) ORDER BY  id desc limit 1,50;"
         */

        /**
         * 无条件搜索
         * SELECT * FROM analysis_tracker_202011 JOIN
         * ( SELECT uuid,max(id) id,count(*) count FROM `analysis_tracker_202011` GROUP BY `uuid` ) p
         * USING(uuid,id) ORDER BY  id desc limit 1,50;
         *
         */
        dd($sql);

        // 分页的数量
        $sql_count = "SELECT count(*) count FROM {$this->model->getTableName()} JOIN
{$subQuery} p USING(uuid,id) ORDER BY id desc";








//        $sql = "SELECT * FROM analysis_tracker_202011 JOIN
//(SELECT uuid, MAX(id) id FROM analysis_tracker_202011 GROUP BY uuid ) p USING(uuid,id)ORDER BY  id desc limit 10;";

        $data_count = $this->model->query($sql_count);
        $lists = $this->model->query($sql);



        foreach ($lists as &$row) {
            $row['ip_formal'] = $this->model->getIpFormalFormal($row['ip']);
            $row['user_formal'] = $this->model->getUserFormal($row['user_id']);
            $row['keep_time'] = $this->model->getKeepTimeFormal($row);
            $row['start_time'] = $this->model->getStartTimeFormal($row['uuid']);
            $row['survival_time'] = '约' . (($row['count'] * 5) - 4) . '秒';
            $row['create_time'] = date('Y-m-d H:i:s',$row['create_time']);
        }

        return json_encode([
            'code'=>0,
            'count'=>$data_count[0]['count'],
            'data'=>$lists,
        ]);
    }


model


    /**
     * 动态选择当前的表,查看list的时候 默认显示本月的,或者搜索的时候 指定日期的数据表
     * @return array
     */
    public function getTableName()
    {
        $params = Request::get();
        if (!isset($params['searchParams'])) return $this->name;
        $searchParams = json_decode($params['searchParams'], true);
        $tableName = $searchParams['tableName'] ?? $this->name;
        return $tableName;
    }
    
    
        /**
     * 搜索
     * @return array
     */
    public function search()
    {
        $params = Request::get();
        if (!isset($params['searchParams'])) return [];
        $searchParams = json_decode($params['searchParams'], true);
        $where = [];
        unset($searchParams['create_time']);
        foreach ($searchParams as $field => $value) {
            $value = trim($value);

            if ($field == 'tableName') continue;
            if ($value == '') continue;

            $where[] = [$field, 'like', "%{$value}%"];
        }

        return $where;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值