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

Laravel数组ID批量查询数据库并按ID返回对应结果问题

问题分析

你当前的代码是逐个统计每个学校符合条件的记录数,所以最终得到的是各学校数量组成的数组[3,1],而你预期的4应该是这两个数值的总和。其实完全没必要循环逐个查询,不仅效率低,还容易出现冗余输出,我们可以优化写法来达到需求。

解决方案

方案1:直接获取总记录数(推荐)

如果你的核心需求就是拿到所有学校符合条件的总数量,推荐用一次数据库查询搞定,效率更高:

$schools = collect($api->schools);
$schoolIds = $schools->pluck('id')->toArray(); // 提取所有学校ID为数组

// 一次查询获取总数量
$totalCount = DB::table('sys_record')
    ->join('sys_users', 'sys_users.id_jovens', '=', 'sys_record.id_user')
    ->where('sys_record.id_step', '<=', 4)
    ->whereIn('sys_users.schoolId', $schoolIds) // 用whereIn匹配所有目标学校ID
    ->count();

echo $totalCount; // 输出4

方案2:保留各学校数量同时计算总和

如果你既需要保留每个学校的记录数数组,又要得到总和,可以在现有代码基础上补充求和步骤:

$schools = collect($api->schools);
$info = $schools->pluck('id');
$information = [];

for($i = 0;$i<count($info);$i++){
    $select = DB::table('sys_record')
        ->where('sys_record.id_step','<=',4)
        ->where('sys_users.schoolId','=',$info[$i])
        ->join('sys_users', 'sys_users.id_jovens', '=', 'sys_record.id_user')
        ->get();
    $information[] = count($select);
}

// 计算数组元素总和
$total = array_sum($information);
echo $total; // 输出4
// 也可以查看各学校的数量数组
print_r($information); // 输出Array ( [0] => 3 [1] => 1 )
补充说明

你原代码里把print_r($information)放在了循环内部,所以每次循环都会输出一次当前的数组状态,这就是你看到两次输出的原因。把它移到循环外面,就能看到完整的最终数组了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 15:52:58