You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中如何用1-2个查询获取MySQL单列重复值统计(避免N+1问题)

Laravel 单列重复值统计(解决N+1查询问题)

方法一:使用Eloquent查询

直接通过Eloquent聚合查询+分组实现,一次查询即可完成统计,彻底避免N+1问题:

// 替换YourModel为你的实际模型类,target_column为要统计的列名
$duplicateCounts = YourModel::query()
    ->select('target_column', \DB::raw('COUNT(*) as repeat_count'))
    ->groupBy('target_column')
    ->pluck('repeat_count', 'target_column');

// 如需转为数组格式,调用toArray()
$duplicateCountsArray = $duplicateCounts->toArray();

pluck('repeat_count', 'target_column')会直接将结果转换为目标列唯一值为键、重复次数为值的集合,最终输出类似:['值1' => 3, '值2' => 9]。

方法二:使用原生SQL查询

如果偏好原生SQL写法,同样只需一次查询:

// 替换your_table为实际表名,target_column为要统计的列名
$rawResults = \DB::select('SELECT target_column, COUNT(*) as repeat_count FROM your_table GROUP BY target_column');

// 转换为键值对格式
$duplicateCounts = collect($rawResults)->pluck('repeat_count', 'target_column')->toArray();

核心原理

以上两种方案都是利用MySQL的GROUP BY聚合能力,在数据库层面一次性完成所有重复值的统计,无需先查询所有唯一值再循环统计次数,从根源上杜绝了N+1查询的产生。

内容的提问来源于stack exchange,提问作者Imran Yahya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 05:48:22