2016-12-15 171 views
0

我有4個單獨的select查詢,每個查詢都會生成一個具有相同列的表,如id和created_at。 我想要union,然後按created_at排序並獲取每個id的最近的created_at。所以我還需要使用group by。Laravel union幾個表並按列排序結果

從文檔的結果(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

它導致不同的查詢。我想「選擇*從(聯合...)組編號」,我得到(選擇*從表組ID)聯合(...) – Victor

+0

@Victor現在檢查?編輯我的回答 – prateekkathal

0

你可以做到以下幾點:

  • 合併所有查詢集合

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

  • 添加你需要收集方法

$過濾= $收藏 - > GROUPBY( '身份證') - > sortBy( '​​created_at');

+0

如果數據庫中有很多行,則會出現內存問題。就像想象有100k行,我會創建100k項目的集合 – Victor