mysql 使用group by之后返回的总条数问题

摘要:
原始产品仅与第三级标签关联。在这种情况下,无法根据第一级标签搜索产品。因此,查询中使用MySQL groupby,根据产品ID进行分组。使用groupby后,重复问题得到解决,但新问题再次出现,查询的项目总数不正确。解决方案是在分组后取出所有数据,并使用PHP的count()函数计算条目总数。然而,这种方法的性能较差。因为每次都会取出数据库表中的所有数据。

标签一共有三级。

原本产品只与三级标签关联。

这样的话根据一级标签就搜索不到产品。

因为客户要求点击一级标签或二级标签要能搜出三级标签的产品,所以后台做了处理,把产品与一级二级标签都进行了关联,所以导致产品与标签不是一对一的关系,变成一对多的关系,所以用左连接查询会有产品重复的情况。

所以在查询的时候用了mysql的group by,查询的时候根据产品id来分组。
用了group by之后解决了重复的问题,但是新的问题又出现了,查询出来的总条数有问题。
在这里插入图片描述
在这里插入图片描述
解决方法是拿出分组之后的所有数据,用php的count() 函数算出总条数。但是这样的方法性能比较差。因为每次都会拿出数据库一张表所有的数据。
下面是接口代码

public function listProducts(Request $request) {
        $result = DB::table('product_labels')
            ->select([
                'product_labels.id as id',
                'products_product_id.id as product_id',
                'products_product_id.name as name',
                'products_product_id.image as image',
                'products_product_id.price as price',
                'products_product_id.cer_year as cer_year',
                'product_labels.label_id as label_id',
            ]);
        $result = $result->leftJoin('products as products_product_id', 'products_product_id.id', '=', 'product_labels.product_id');

        $result = $result->groupBy('product_id');
		//取出所有分组之后的数据
        $count = count($result->get());
		
        $result = $result
            ->offset($request->input('offset'))
            ->limit($request->input('length'))
            ->get();
        
        $result = [
            'data' => $result,
            'total' => $count
        ];
        return $this->success($result);
    }

免责声明:文章转载自《mysql 使用group by之后返回的总条数问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇位姿检索PoseRecognition:LSH算法.p稳定哈希python 后台爆破工具下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【Mysql数据库】知识点总结

本文转载自:http://www.cnblogs.com/tonghun/p/7191131.html一 数据库常用操作 mysql -u+username -p+password:登陆数据库管理系统,如mysql -uroot -p123。 create database dbName:创建数据库。 drop database dbName:删除数...

MySQL的瑞士军刀(转)

这里主要讲mysql运维中的一些主要工具,这些工具可能大家都用过,特别是系统管理员或者做linux服务器维护的同学可能都知道这些小工具,这 里讲得会比较多一些,除了系统监控的小工具,还包括一些mysql的工具,甚至深入一些的工具也会讲到,重点是大家听完了后,一定要去自己动手实践一下, 这样才有意义,熟能生巧。 光听说过是不行的,还得都要去实践,实践出真知,...

小米监控 open-falcon部署

具体详情请参考官方文档  http://book.open-falcon.org/zh_0_2/quick_install/    centos6.8    建议centos7系统  否则后面按照官方文档来是有很多问题的   需要解决Python依赖问题    Python2.7 版本以上,由于centos6.8  pyhton默认版本是 2.6 环境准备...

MySQL之SQL优化详解(二)

目录 MySQL之SQL优化详解(二) 1. SQL的执行顺序 1.1 手写顺序 1.2 机读顺序 2. 七种join 3. 索引 3.1 索引初探 3.2 索引分类 3.3 建与不建 4. 性能分析Explain (1)id:select查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序 (2) select_t...

项目实战 从 0 到 1 学习之Flink (28)FlinkSql教程(二)

从kafka到mysql 新建Java项目 最简单的方式是按照官网的方法,命令行执行curl https://flink.apache.org/q/quickstart.sh | bash -s 1.10.0,不过这种方法有些包还得自行添加,大家可以复制我的pom.xml,我已经将常用的包都放进去了,并且排除了冲突的包。注意的是,本地测试的时候,...

Mysql 10053 SocketException 你的主机中的软件中止了一个已建立的连接。

问题:存数据库失败 错误信息: Mysql 1053 SocketException 你的主机中的软件中止了一个已建立的连接。 解决方法:修改数据库最大数据传输量【max_allowed_packet】 1:查询【max_allowed_packet】:show variables like '%max_allowed_packet%';   结果只有10...