利用数组拼接来代替连表查询

来源:互联网 发布:比特彗星tcp端口阻塞 编辑:程序博客网 时间:2024/06/05 19:27

有时候多表连表查询比较麻烦容易出错,效率上也不一定有单表快。我们可以用单表查询来代替连表查询。

单表查询需要用把结果拼接起来。

情形:表A,表B  关系 在B表中a_id = A表中id。表A与表B是1对多的关系或者是1对1的关系

$ar =$db->('select * form A  where 条件 ')

$ar 二维数组

$ids=array_column($ar,'id');$br=$db->('select * from B where a_id in ('.join(',',$ids).') ');//二维数组算法1:常规思路,用两个数循环判断    foreach($ar as $k=>$v){       foreach($br as $k1=>$v1){        if($v['id']==$v1['a_id']){        $ar[$k]['b_list'][]=$v1;        }      }   }以上这种思路代码逻辑清晰,不过两个foreach循环,感觉不太好。算法2:先把数组$br用一个新数组拼装下,在与数组$ar拼接$cr=[];foreach($br as $k=>$v){  $cr[$v['a_id']][]=$v; //如果A与B是一对一关系:$cr[$v['a_id']]=$v; }foreach($ar as $k=>$v){   if(isset($cr[$v['id']])){      $ar[$k]['b_list']=$cr[$v['id']];   }else{      $ar[$k]['b_list']=[];   }}这种算法虽然代码多点,却仅仅循环了两次就得到了结果。比算法1更好