我有以下疑问:

$top_cont = DB::table('quests')
       ->whereBetween('created_at', [Carbon::now()->startOfDay(), Carbon::now()->endOfDay()])
       ->take(5)
       ->get();

quests表有一个user_id列。我正在尝试获得贡献最大的前5名(即今天任务表中的行数最多)。
如何调整查询以使出现次数最多的user_ids出现?
如果有人能在原始sql中完成,这也会很有帮助。

最佳答案

你可以这样做:

$top_cont = DB::table('quests')
    ->select('user_id', DB::raw('count(*) as contributions'))
    ->whereDate('created_at', '>=', now()->startOfDay())
    ->take(5)
    ->groupBy('user_id')
    ->orderBy('contributions', 'desc')
    ->get();

此表格应提供5份记录:
dd($top_cont);

=> Illuminate\Support\Collection {#3403
     all: [
       {#256
         user_id: 2,
         contributions: 51,
       },
       {#3417
         user_id: 975,
         contributions: 50,
       },
       {#3418
         user_id: 743,
         contributions: 46,
       },
       {#3419
         user_id: 538,
         contributions: 45,
       },
       {#3420
         user_id: 435,
         contributions: 18,
       },
     ],
   }

关于php - 在Laravel中带来某个字段最多出现的查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58568356/

10-16 11:27