ThinkPHP関連サブクエリの実装

1474 ワード

関連クエリーとサブクエリーは一般的には一緒に使用されませんが、複雑なシーンでも使用されます.ここでは少し説明します.
シーン
例えば、A表は省表、B表は都市表、C表は都市の万達広場表、D表は万達広場の店舗表です.
現在のページでは、都市テーブルを呼び出す必要があります.このテーブルの内容は次のとおりです.
各市名の左側には省名が掛けられ、右側には同市のすべての万達広場のリスト(1つの広場だけではない)が並べられ、各万達広場のリストの後ろには同広場の大ブランドのリストが付いている.その中で、各市の万達広場と大ブランドのリストが合併して1つのセルに書かれている.
典型的な行は次のとおりです.


万達広場
湖南
長沙
A万達老鳳祥GUCCI...B万達老鳳祥俏江南
構想
万達表はそれぞれ市表、商店表と内関連検索を行い、これはサブ検索として市表idをインデックスとし、その後、市表左関連省表は省名を得、市表も左関連上のサブ検索を行い、万達と商店の一括情報を得た.
インプリメンテーション
                $  _list = Db::table('   ')
                    ->join('  ', '  . _id =  .id')
                    ->join('   ', '  .  _id =   .id')
                    ->field(' .id, group_concat(   ) AS   _name,...          )
                    ->group(' .id')
                    ->select(false);

ポイント:1、上のコードはまずサブクエリのコード自体を取得し、select(false)はコードのみを生成し、実際のクエリではないことを表す.生成されたコードには左右のかっこは付けないので、以下で使用する場合は左右のかっこを付ける必要があります.2、group_concatのgroup_concat、私たちは万達と商店を1つのセルに書くつもりです.
                $ _list = Db::table('  ')
                    ->join('  ', ' . _id =  .id', 'LEFT')
                    ->join('('.$  _list.') as     ', ' .id =     .id', 'LEFT')
                    ->field(' .id, ...    ')
                    ->select();

ポイントは、クエリー文を囲み、別名を与えることです.