gpt4 book ai didi

laravel - 如何使用 Eloquent 对分组结果进行排序?

转载 作者:行者123 更新时间:2023-12-04 05:31:30 25 4
gpt4 key购买 nike

我已经尝试解决了一段时间,但似乎无法使其正常工作。我有一张看起来与此类似的表格。

表:问题

id  yearly_issue    year    stock   created_at      updated_at      magazine_id 
1 10 2000 1 [timestamp] [timestamp] 3
2 12 1994 6 [timestamp] [timestamp] 10
3 36 2007 10 [timestamp] [timestamp] 102
4 6 2002 7 [timestamp] [timestamp] 7
5 6 2002 2 [timestamp] [timestamp] 5
6 12 2003 9 [timestamp] [timestamp] 10
7 11 2003 12 [timestamp] [timestamp] 10

我的问题是我需要对其进行排序(简单!),但是,我只想获取每个杂志中的一个(列magazine_id)。

到目前为止,我的 Eloquent 查询是:

$issues = Issue::where('stock', ($all ? '>=' : '>'), 0)
->orderBy('year', 'desc')
->orderBy('yearly_issue', 'desc')
->take($perpage)
->get();

我以为添加 groupBy('magazine_id')会有所帮助,但似乎只能部分地帮助我。结果顺序不正确。因此,我的问题是-是否有任何简单的方法可以解决此问题?

我一直在尝试针对类似问题的各种答案,但我完全无法实现它。

Retrieving the last record in each group

或者

How to get the latest record in each group using GROUP BY?

更多的帮助将不胜感激。

编辑:
我目前最接近的是:

SELECT i1.*, c.name AS image, m.title AS title
FROM issues i1
INNER JOIN covers c ON i1.id = c.issue_id
INNER JOIN magazines m ON i1.magazine_id = m.id
JOIN (SELECT magazine_id, MAX(year) year, MAX(yearly_issue) yearly_issue FROM issues GROUP BY magazine_id) i2
ON i1.magazine_id = i2.magazine_id
AND i1.year = i2.year
-- AND i1.yearly_issue = i2.yearly_issue
WHERE i1.stock ($all ? '>=' : '>') 0
ORDER BY i1.year DESC, i1.yearly_issue DESC
LIMIT $perpage

但是,这根本没有给我想要的结果。

最佳答案

您需要在MAX子句中添加一个SELECT函数,以便按DESC结束顺序对每列进行排序。相反的是按ASC结束顺序排序的列,您需要在MIN子句中添加SELECT函数。

您的 Eloquent 查询必须包含raw选择:

$issues = DB::table('issues')
->select(DB::raw('id, max(year) as year, max(yearly_issue) as yearly_issue, stock, created_at, updated_at, magazine_id'))
->groupBy('magazine_id')
->orderBy('year', 'desc')
->orderBy('yearly_issue', 'desc')
->take(10)
->get();

的唯一缺点是,您需要指定要检索的每一列。并且不要使用*选择器,它将覆盖select子句中的聚合函数。

更新:好像在*子句中的聚合函数也起作用之前添加SELECT选择器一样。这意味着您将原始选择重写为:

->select(DB::raw('*, max(year) as year, max(yearly_issue) as yearly_issue'))

我认为将*选择器放在聚合函数之前会覆盖它们的列。

关于laravel - 如何使用 Eloquent 对分组结果进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18159465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com