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

在解决产品与标签一对多关系导致的查询重复问题时,使用GROUP BY解决了重复,但带来了总条数计算不准确的问题。通过在PHP中使用COUNT()函数计算分组后的所有数据条数,虽然解决了计数问题,但导致了性能下降,因为每次都需获取全部数据。为提升性能,接口代码中使用LEFT JOIN结合GROUP BY进行数据分组,并在获取分页数据的同时,计算GROUP BY后的总条数。
摘要由CSDN通过智能技术生成

标签一共有三级。

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

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

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

所以在查询的时候用了mysql的group by,查询的时候根据产品id来分组。

用了group by之后解决了重复的问题,但是新的问题又出现了,查询出来的总条数有问题。

cb4ef6b43b76132bdf9202edbe46369b.png

9e23124d330925d9eefaa1384ecde0e5.png

解决方法是拿出分组之后的所有数据,用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);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值