Laravel获取记录最多的前5个ID
Laravel Get the Top 5 IDs with the Most Records
我有一个名为 errors
的 table,其中包含以下字段: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 执行此操作。谁能帮帮我?
数据库截图
试试这个: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();
您可以使用 DB::raw("{query}")
函数来执行原始查询。
但是如果你想使用eloquent,你将不得不使用关系并查询这些。例如,如果您有一个 Website
模型与 Error
模型有关系,您可以执行以下操作以获取错误最多的网站模型:
Website::withCount('errors') // Count the errors
->orderBy('errors_count', 'desc') // Order by the error count
->take(5) // Take the first 5
->get();
这可能会有帮助。
$result = Website::selectRaw("website_id,count(id) as errors")
->groupBy('website_id')
->orderBy('errors','DESC')
->limit('5')
->get();
试试这个简化版本 laravel eloquent;
$some_data = YourModel::select('column_name')
->groupBy('column_name')
->orderByRaw('COUNT(*) DESC')
->take(5)
->get();
我有一个名为 errors
的 table,其中包含以下字段: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 执行此操作。谁能帮帮我?
数据库截图
试试这个: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();
您可以使用 DB::raw("{query}")
函数来执行原始查询。
但是如果你想使用eloquent,你将不得不使用关系并查询这些。例如,如果您有一个 Website
模型与 Error
模型有关系,您可以执行以下操作以获取错误最多的网站模型:
Website::withCount('errors') // Count the errors
->orderBy('errors_count', 'desc') // Order by the error count
->take(5) // Take the first 5
->get();
这可能会有帮助。
$result = Website::selectRaw("website_id,count(id) as errors")
->groupBy('website_id')
->orderBy('errors','DESC')
->limit('5')
->get();
试试这个简化版本 laravel eloquent;
$some_data = YourModel::select('column_name')
->groupBy('column_name')
->orderByRaw('COUNT(*) DESC')
->take(5)
->get();