【问题标题】:Laravel Eloquent data rankingLaravel Eloquent 数据排名
【发布时间】:2013-04-09 12:35:47
【问题描述】:

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

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

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

结果将是:

John
Mike
Denis

谢谢

【问题讨论】:

  • 你想要一个专门的 laravel 解决方案吗?或者“纯 sql”解决方案可以为您工作?
  • 嗯,两者都行.. :) 我只是对 Eloquent 很好奇

标签: php sql laravel


【解决方案1】:

这就是你使用 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();

如果您愿意,可以使用 DB::table('tableName')-> 而不是 Model:: 来使用 Query Builder (Fluent)。

注意事项

  • DB::raw() 指示 Laravel 不要放 那里有倒数。
  • take() 限制行数。

【讨论】:

    【解决方案2】:

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

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

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2020-04-24
      • 2017-07-12
      • 2016-01-04
      • 2015-09-19
      • 1970-01-01
      • 2021-01-25
      • 1970-01-01
      • 2015-02-03
      • 1970-01-01
      相关资源
      最近更新 更多