【问题标题】:Get latest values in GROUP BY using Laravel Eloquent ORM使用 Laravel Eloquent ORM 获取 GROUP BY 中的最新值
【发布时间】:2013-05-10 07:19:50
【问题描述】:

我试图了解 Laravel 的 Eloquent ORM 是如何工作的,并且正在查看以下 MySQL 查询:

SELECT id, name, date FROM tablename GROUP BY name ORDER BY date

使用GROUP BY 总是返回最旧的name 值。有没有办法返回 latest 值?

【问题讨论】:

  • 这更像是一个 SQL 问题,而不是 Laravel 问题。 GROUP BY 在 ORDER BY 之前执行;它并不是真的为此而设计的。您可能会在这里找到解决方案stackoverflow.com/a/11930734/1269513
  • 我明白了,所以 ORM 还没有处理这么复杂的查询。
  • 昨天我解决了它反转在数据库中添加数据。很伤心,但很有效。
  • 你是怎么做到的?请发布查询。

标签: php orm laravel


【解决方案1】:

试试下面的代码,

Tablename::select('id', 'name', DB::raw('max(date) as latest_date'))
 ->groupBy('name')
 ->orderBy('latest_date')
 ->get()

【讨论】:

    【解决方案2】:

    这是一个有效的 SQL 查询,它只获取您使用 a.id = b.id 选择的唯一的最新结果 - 如果您想要使用唯一的名称,那么它将是 a.name = b.name

    SELECT DISTINCT a.*
    FROM tablename a
    LEFT JOIN tablename b ON a.id = b.id
    AND a.date < b.date
    WHERE b.date IS NULL
    

    【讨论】:

      猜你喜欢
      • 2017-09-03
      • 1970-01-01
      • 2021-08-13
      • 1970-01-01
      • 2016-04-22
      • 2013-01-07
      • 2017-07-31
      • 2020-06-24
      • 2018-03-29
      相关资源
      最近更新 更多