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

有时候多表连表查询比较麻烦容易出错,效率上也不一定有单表快。我们可以用单表查询来代替连表查询。
单表查询需要用把结果拼接起来。
情形:表A,表B关系 在B表中a_id = A表中id。表A与表B是1对多的关系或者是1对1的关系
$ar =$db->('select * form Awhere 条件 ')
$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更好



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



    推荐阅读