我正在尝试根据数据库中具有 id 的行数来划分用户范围。
我的数据集看起来像这样(简化):
A .... John
A .... John
B .... Mike
A .... John
B .... Mike
C .... Denis
我想要前三个唯一名称,按左侧值出现的次数排序。
我可以用 Laravel 雄辩的 ORM 做到这一点吗?
结果将是:
John
Mike
Denis
谢谢
这就是你使用 Laravel 的 Eloquent ORM 的方式
Model::select('name')
->groupBy('name')
->orderBy(DB::raw('count(name)'), 'desc')
->take(3)
->get();
如果您使用的是 Laravel 3,请使用蛇盒:
Model::select('name')->group_by('name')->order_by(DB::raw('count(name)'), 'desc')->take(3)->get();
如果您愿意,您可以通过使用 Query Builder (Fluent)DB::table('tableName')->
而不是Model::
.
备注:
DB::raw()
指示 Laravel 不要在此处放置反引号。take()
限制行数。不是 laravel 解决方案,但它可能有效(纯 SQL,特别是 MySQL):
select name
from yourTable
where ... # Your filter conditions go here
group by name
order by count(id) desc
limit 3;
希望这可以帮助