Laravel 获取记录最多的前 5 个 ID

Posted

技术标签:

【中文标题】Laravel 获取记录最多的前 5 个 ID【英文标题】:Laravel Get the Top 5 IDs with the Most Records 【发布时间】:2017-09-15 10:29:34 【问题描述】:

我有一个名为 errors 的表,其中包含以下字段:id, website_id, message & level. 我正在尝试获取错误最多的前 5 个网站。

查询

SELECT website_id, COUNT(id) AS 'errors' FROM errors GROUP BY website_id ORDER BY COUNT(*) DESC

我不知道如何使用 Laravel 查询构建器和 Eloquent 来做到这一点。谁能帮帮我?

数据库截图

【问题讨论】:

【参考方案1】:

您可以使用DB::raw("query") 函数来执行您的原始查询。

但如果你想使用 eloquent,你将不得不使用关系并查询这些。例如,如果您有一个与Error 模型相关的Website 模型,您可以执行以下操作来获取错误最多的网站模型:

Website::withCount('errors')            // Count the errors
    ->orderBy('errors_count', 'desc')   // Order by the error count
    ->take(5)                           // Take the first 5
    ->get();

【讨论】:

您的解决方案看起来也很有效,所以我也要试试!感谢您的帮助。 @KoenvandeSande 如果我是你,我会使用这个 Eloquent 解决方案而不是使用原始查询。 是的,我将尝试两种方式,看看哪一种对我的应用程序来说是最好的和最有用的。 @AlexeyMezenin 您的解决方案确实更好,再次感谢您的帮助!【参考方案2】:

这可能会有所帮助。

    $result = Website::selectRaw("website_id,count(id) as errors")
              ->groupBy('website_id')
              ->orderBy('errors','DESC')
              ->limit('5')
              ->get();

【讨论】:

【参考方案3】:

试试这个:https://laravel.com/docs/5.4/queries#retrieving-results

$errors = DB::table('errors')
        ->select('website_id', DB::raw('COUNT(id) as errors'))
        ->groupBy('website_id')
        ->orderBy(DB::raw('COUNT(id)'), 'DESC')
        ->take(10)
        ->get();

【讨论】:

为我工作!谢谢。 欢迎 :) 祝你好运【参考方案4】:

试试这个简化版的 laravel eloquent;

$some_data = YourModel::select('column_name')
            ->groupBy('column_name')
            ->orderByRaw('COUNT(*) DESC')
            ->take(5)
            ->get();

【讨论】:

以上是关于Laravel 获取记录最多的前 5 个 ID的主要内容,如果未能解决你的问题,请参考以下文章

读取一个文件,获取其中出现次数最多的前五个字符以及次数

读取一个文件,获取其中出现次数最多的前五个字符以及次数

有1千万条有重复的短信,以文本文件的形式保存,一行一条,也有重复,用5分钟时间找出重复出现最多的前10条短信。

Linux/Centos cpu与内存检查

海量数据中找出出现次数最多的前10个URL

Linux命令经典面试题:统计文件中出现次数最多的前10个单词