thinkphp + mariadb order group 进行分组查询


主题列表:juejin, github, smartblue, cyanosis, channing-cyan, fancy, hydrogen, condensed-night-purple, greenwillow, v-green

贡献主题:https://github.com/xitu/juejin-markdown-themes

theme: juejin
highlight:

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 analysis_tracker_202011 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;
    }

相关文章

安装开始...1.打开“https://dev.mysql.com/downloadsepo/yu...
安装Helm3#官网下载慢#wgethttps://get.helm.sh/helm-v3.5.4...
通过Linux命令行启动用的指令:systemctlstartmariadb.servi...
InstallingMariaDBServer10.4TodeployMariaDBCommunityServe...
阅读目录一什么是存储引擎二mysql支持的存储引擎三使用存储引...
1、安装MariaDB安装命令yum-yinstallmariadbmariadb-server安...