我从数据库获取用户并将其作为数组返回。查询返回22000个用户,这是正确的,现在我正在尝试保存这些用户信息CSV文件,但在此之前我必须检查每个用户的额外功能,例如应用机会,因此检查每个用户,从数组中获取每个单独的 ID 并将其传递给另一个函数需要花费很多时间,而且我还需要检查其他9个函数。什么是最好和最优化的方法来做到这一点。请参阅以下代码
$sql = "SELECT id, first_name,last_name,position_id,user_company,role,last_login_date,
sf_id,user_email,login_count,user_registered FROM er_users";
$query = $this->db->query($sql);
$query = $query->result_array();
foreach ($query as $key => $q) {
$a_opps = vt_applied_opps((object)$q);
$s_opps = vt_suggested_opps((object)$q);
$i_requests_e = vt_interview_request((object)$q);
$i_requests_c = vt_company_interview_request((object)$q);
$i_to_apply = get_invitations_count($q["id"]);
$councils = vt_ac_count((object)$q);
$cbe = vt_cbe_credits((object)$q);
$forum = vt_forums((object)$q);
$bio = vt_is_bio((object)$q);
$resume = vt_is_resume((object)$q);
$q["a_opps"] = $a_opps;
$q["s_opps"] = $s_opps;
$q["i_requests_e"] = $i_requests_e;
$q["i_requests_c"] = $i_requests_c;
$q["i_to_apply"] = $i_to_apply;
$q["councils"] = $councils;
$q["cbe"] = $cbe;
$q["forum"] = $forum;
$q["bio"] = $bio;
$q["resume"] = $resume;
$query[$key] = $q;
}
这些是函数,它们的结果存储在变量中,然后这些变量被用在数组中。请帮我优化这个方法。由于有22K记录,所以foreach循环运行22K次,内部函数也是22K次,请帮我优化这种方式。
答案 0 :(得分:0)
$ sql =“SELECT id, 名字,姓氏,position_id,user_company,角色,last_login_date, sf_id,user_email,login_count,user_registered FROM er_users“; 如果您只需要id,则从SELECT子句中删除剩余的表字段。
其次,
$ a_opps = vt_applied_opps((object)$ q); $ s_opps = vt_suggested_opps((对象)$ Q); $ i_requests_e = vt_interview_request((对象)$ Q); $ i_requests_c = vt_company_interview_request((对象)$ Q);
$ i_to_apply = get_invitations_count($ q [“id”]); $ councils = vt_ac_count((对象)$ Q); $ cbe = vt_cbe_credits((object)$ q);
$ forum = vt_forums((object)$ q); $ bio = vt_is_bio((object)$ q);
$ resume = vt_is_resume((object)$ q);
如果这些函数只从数据库中获取适当的结果,那么可以使用上面的SQL加入这些表,并忽略函数调用。
这些可能会有所帮助。
同时检查Table.field索引,如果您使用的是WHERE子句中的字段,并且这些字段没有索引,那么请为这些字段添加索引以快速生成SELECT SQL。