Laravel中基于指定数据集统计manifestNumber对应originRemitStatus=1的计数
解决manifestNumber对应的originRemitStatus=1记录统计需求
嘿,我来帮你搞定这个统计需求!你已经拿到了originRemitStatus为null的运单列表$unsentManifests,现在需要统计每个唯一manifestNumber对应的全量记录中originRemitStatus=1的数量,下面给你两种可行的实现方式:
方法一:基于现有集合处理(适合小数据量)
先从已有的$unsentManifests集合中提取所有唯一的manifestNumber,再逐个统计对应状态为1的记录数:
// 提取所有唯一的manifestNumber $uniqueManifestNumbers = $unsentManifests->pluck('manifestNumber')->unique(); // 遍历每个编号,统计status=1的数量 $statusCounts = $uniqueManifestNumbers->mapWithKeys(function ($number) { $count = Carrier_Manifest::where('manifestNumber', $number) ->where('originRemitStatus', 1) ->count(); return [$number => $count]; }); // 输出成你需要的列表格式 foreach ($statusCounts as $number => $count) { echo "<li>{$number} ({$count})</li>"; }
方法二:直接数据库查询(高效,适合大数据量)
如果数据量较大,多次查询数据库会影响性能,推荐用子查询一次性搞定:
$statusCounts = Carrier_Manifest::select( 'manifestNumber', \DB::raw('SUM(CASE WHEN originRemitStatus = 1 THEN 1 ELSE 0 END) as count') ) ->whereIn('manifestNumber', function ($query) { // 子查询获取所有存在originRemitStatus为null的manifestNumber $query->select('manifestNumber') ->from('carrier_manifests') // 替换成你的实际表名 ->whereNull('originRemitStatus'); }) ->groupBy('manifestNumber') ->pluck('count', 'manifestNumber');
预期输出结果
运行上述代码后,你会得到符合需求的统计结果,格式如下:
- 1234 (1)
- 9876 (0)
- 4567 (1)
内容的提问来源于stack exchange,提问作者Matthew
相关产品推荐
相关产品推荐

