Laravel 中某个字段出现次数最多的查询

Posted

技术标签:

【中文标题】Laravel 中某个字段出现次数最多的查询【英文标题】:Query that brings the most occurrences of a certain field in Laravel 【发布时间】:2020-02-22 09:17:03 【问题描述】:

我有以下疑问:

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

quests 表有一个 user_id 列。我正在尝试获得贡献最多的前 5 个user_ids(即今天任务表中的行数最多)。

如何调整查询以找到出现次数最多的user_ids?

如果有人可以在原始 sql 中做到这一点,这也会有所帮助。

【问题讨论】:

SELECT user_id, COUNT(*) FROM quests WHERE created_at >= date(NOW()) AND created_at < date_add(date(NOW()), INTERVAL 1 DAY) GROUP BY user_id ORDER BY COUNT(*) DESC LIMIT 5 【参考方案1】:

您可以使用以下查询:

    DB::table('quests') 
       ->whereBetween('created_at', [ Carbon::now()->startOfDay(),Carbon::now()->endOfDay()])
        ->select('user_id', DB::raw('count(*) as count') )
        ->groupBy('user_id')
        ->limit(5)
        ->orderBy ( 'count  DESC')
        ->get();

【讨论】:

【参考方案2】:

你可以这样做:

$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,
       ,
     ],
   

【讨论】:

以上是关于Laravel 中某个字段出现次数最多的查询的主要内容,如果未能解决你的问题,请参考以下文章

怎么判断一个字符里面某个字符串出现的次数

java求数组中,某个值连续出现次数最多的数的次数

有一万条字符串,要找出前10条出现次数最多的,该如何解决

java 取list集合中出现次数最多的值

sql语句,求出现次数最多的组中,出现次数最多的一条数据

找出字符串中出现次数最多的字符和次数