2016-12-15 16 views
0

私は4つの別々の選択クエリを持っています。それぞれがidとcreated_atのような同じカラムを持つテーブルになります。 私はその後、created_atで注文し、各idに対して最新のcreated_atを取得したいと思います。だから私はグループ別に使う必要もあります。Laravelいくつかのテーブルを結合し、結果をカラムでソートする

(select ..) union (select ...)におけるドキュメントの結果の例が、私はそのような

DB::select(DB::raw(id, MAX(created_at)) 
->from($query1->union($query2)->union($query3)->union($query4))) 
->groupBy('id') 
->orderBy('created_at'); 

か何かのような何かをする方法を見つけ出すことはできません。

答えて

0

これはあなたのために働く必要があります:)

$query1 = DB::table('table1')->where(....); 
$query2 = DB::table('table2')->where(....); 
$query3 = DB::table('table3')->where(....); 
$query4 = DB::table('table4')->where(....); 
$query5 = DB::table('table5')->where(....); 

$data = DB::select(DB::raw('id, MAX(created_at) as max_created_at') 
      ->union($query1)->union($query2)->union($query3)->union($query4)->union($query5) 
      ->orderBy('max_created_at') 
      ->groupBy('id') 
      ->get(); 

あなたはすべての問題に直面した場合、私に教えてください:)

+0

異なるクエリが発生します。私は "select * from(unions ... id)"グループを選択し、(id *によってテーブルグループからselect)ユニオン(...)を取得したい。 – Victor

+0

@Victor今すぐチェック? – prateekkathal

0

あなたは、次の操作を行うことができます

  • はにすべてのクエリをマージコレクション

$ result = $ query1-> merge($ query2) - > merge($ query3) - > merge($ query4);

  • はあなたがコレクションに必要なメソッドを追加します

$フィルター= $集・> GROUPBY( 'ID') - > SORTBY( 'のcreated_at');

+0

DBに行がたくさんある場合は、メモリの問題があります。 100k行があると想像してみましょう.100kアイテムのコレクションを作成します – Victor

関連する問題