解决foreach循环数据慢的问题

如果有多个从数据库获取来的结果集。

现在要使用foreach+if else,将这些结果集拼接为一个数组,返回给前台。

我通常会先获取一个结果集,之后foreach该结果集,在foreach里面,去获取另一个结果集,最后再拼接。

$db1 = Db::table('table1')->select()->toArray();
foreach($db1 as $key=>$item){
    $db2 = Db::table('table2')->where('id', '=', $item['bId'])->select()->toArray();
    $db['list'][$key]['name'] = $db2[0]['name'];
}

这样的结果就是——给前台返回的数据,极慢。原因很简单,假设结果集1,有100条数据,结果集2,也有100条,如果按照上述写法。那么就会造成N+次循环。结果集1要循环100遍,而每一遍都要请求一次数据库,100遍就是请求100次数据库……

每次请求数据库,因为加了条件判断,那么在数据库内部,数据库自己又会进行一个遍历……

怎么可能不慢?

所以,还是先单独获取结果集1和2,再用foreach去操作,速度就快起来了。

$db1 = Db::table('table1')->select()->toArray();
$db2 = Db::table('table2')->select()->toArray();
foreach($db1 as $key=>$item){
    foreach($db2 as $key2=>$item2){
        if($item['bId'] == $item2['id']){
            $db['list'][$key]['name'] = $item2['name'];
        }
    }
}

为TA充电
共{{data.count}}人
人已赞赏
tp6-边用边总结

防止上传超时

2021-4-27 11:00:16

tp6-边用边总结

获取路由参数

2021-6-3 9:12:48

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索