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的主要内容,如果未能解决你的问题,请参考以下文章