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_id
s(即今天任务表中的行数最多)。
如何调整查询以找到出现次数最多的user_id
s?
如果有人可以在原始 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 中某个字段出现次数最多的查询的主要内容,如果未能解决你的问题,请参考以下文章