【问题标题】:Laravel Get the Top 5 IDs with the Most RecordsLaravel 获取记录最多的前 5 个 ID
【发布时间】: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 来做到这一点。谁能帮帮我?

数据库截图

【问题讨论】:

    标签: php mysql laravel eloquent laravel-query-builder


    【解决方案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();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-22
        • 2020-10-01
        相关资源
        最近更新 更多