連結テーブル・クエリーの代わりに配列接合を使用する

1397 ワード

マルチテーブルはテーブルクエリーが面倒でエラーが発生しやすい場合があり、効率的に単一テーブルが速いとは限らない.連結テーブル・クエリーの代わりに、単一のテーブル・クエリーを使用できます.
単一テーブルクエリは、結果をつなぎ合わせる必要があります.
状況:表A、表B関係はB表中a_id=Aテーブルのid.表Aと表Bは1対多の関係または1対1の関係である
$ar=$db->('select*form A where条件')
$ar 2 D配列
$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