私は今これを理解しようとしてきましたが、それを機能させるようには見えません。私はこれに似た表を持っています。Eloquentを使用してグループ化された結果を注文するには?
表:問題
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)のいずれかを取得したい(簡単!)。今のよう
マイ雄弁クエリは次のとおりです。
$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?
詳細なヘルプははるかに高く評価されるだろう。
EDIT:
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
はしかし、それがすべてで私に望ましい結果を与えていない: 私は現在、午前最も近いがこれです。
驚くばかり! =)それは私の週末を救った。 – Andreas
Uooow!それは本当に人生の節約になりました。どうもありがとう! –
ありがとう、これは最高の解決策です。 –