微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Codeigniter 服务器超时 - 在 for 循环内运行批量数据库查询

如何解决Codeigniter 服务器超时 - 在 for 循环内运行批量数据库查询

我在 foreach 循环中编写了一个数据库查询,在某些情况下,查询会使用不同的参数执行 100 多次。

当 foreach 循环仅重复几轮时,脚本运行良好。

除了重新排列查询以在单个请求中获取所有数据之外,还有其他替代方法可以让我以有效的方式使用 foreach 循环运行脚本吗?

我当前的脚本

//  some where clauses here
$re = $this->db->get('cash_collection')->result();
    
$d=0;
foreach($re as $area){   // this loop runs 100+ rounds
    // call a function with single db query
    $re[$d]->area_paid = $this->Payment_m->get_inTotalFornormal($area->fka_id,$area->in_date);
    $d++;
}       
return $re;

解决方法

据我了解您的需要,我认为您需要将“result()”替换为“unbuffered_row()”。 result() 将一次将整个结果加载到内存中,而 unbuffered_row() 方法返回单个结果行,而无需在内存中预取整个结果。您可以了解更多here

示例代码

//  some where clauses here
$re = $this->db->get('cash_collection');
    
$d=0;
while ($area = $query->unbuffered_row()) {   // this loop runs 100+ rounds
    // call a function with single db query
    $re[$d]->area_paid = $this->Payment_m->get_inTotalForNormal($area->fka_id,$area->in_date);
    $d++;
}       
return $re;

现在您的脚本应该能够处理大型结果集。

注意 CI4getUnbufferedRow()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。