为了账号安全,请及时绑定邮箱和手机立即绑定

如果我需要查询出1万以上的记录,又要关联其他表的字段,怎么做效率会快?求解答!

如果我需要查询出1万以上的记录,又要关联其他表的字段,怎么做效率会快?求解答!

当年话下 2019-06-13 09:52:47
$cardNoBegin=1;$cardNoEnd=10000;$where['number']=array('between',[$cardNoBegin,$cardNoEnd]);$list=VipCardModel::where($where)->field('id,number,issue_uid,rank')->select();foreach($listas&$value){//只想到foreach来处理,但是这样很奇怪,觉得这样处理不对。$value['name']=UserModel::where(array('id'=>$value['issue_uid']))->value('name');}
查看完整描述

2 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

shmiyle同学已经正确的回答了这个问题,我在他的基础上优化一下,提升一点效率
$where['number']=array('between',[$cardNoBegin,$cardNoEnd]);
$list=VipCardModel::where($where)->field('id,number,issue_uid,rank')->select();
$issueUidList=array_unique((array_column($list,'issue_uid')));
unset($list);
//查询用户信息
$userList=UserModel::where(array('id'=>array('in',$issueUidList)))->value('name');
$userInfoList=array_column($userList,'name','id');
foreach($listas$key=>$value){
$list[$key]['name']=$userInfoList[$value['issue_uid']]??'';
}
                            
查看完整回答
反对 回复 2019-06-13
?
森林海

TA贡献2011条经验 获得超2个赞

这样肯定是不可取的,循环里面执行查询。可以试试with
$list=VipCardModel::where($where)->with('user')->field('id,number,issue_uid,rank')->select();
                            
查看完整回答
反对 回复 2019-06-13
  • 2 回答
  • 0 关注
  • 389 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信