首页 文章

Laravel联合几个表并按列对结果进行排序

提问于
浏览
0

我有4个单独的选择查询,每个查询都会生成一个具有相同列的表,如id和created_at . 我想联合,然后按created_at命令并获取每个id的最新created_at . 所以我还需要使用group by .

文档中的示例结果为 (select ..) union (select ...) ,但我无法弄清楚如何做类似的事情

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

或类似的东西 .

2 回答

  • 0

    您可以执行以下操作:

    • Merge all your queries to a collection

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

    • Add the methods that you need to the collection

    $ filtered = $ collection-> groupBy('id') - > sortBy('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();
    

    如果您遇到任何问题,请告诉我:)

相关问题