1

我正在尝试根据数据库中具有 id 的行数来划分用户范围。
我的数据集看起来像这样(简化):

A .... John
A .... John
B .... Mike
A .... John
B .... Mike
C .... Denis

我想要前三个唯一名称,按左侧值出现的次数排序。
我可以用 Laravel 雄辩的 ORM 做到这一点吗?

结果将是:

John
Mike
Denis

谢谢

4

2 回答 2

4

这就是你使用 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()限制行数。
于 2013-04-17T07:18:58.403 回答
0

不是 laravel 解决方案,但它可能有效(纯 SQL,特别是 MySQL):

select name
from yourTable
where ... # Your filter conditions go here
group by name
order by count(id) desc
limit 3;

希望这可以帮助

于 2013-04-16T22:52:41.733 回答