Ich habe schon seit einiger Zeit versucht, das herauszufinden, und kann es einfach nicht funktionieren lassen. Ich habe einen Tisch, der dem ähnlich sieht.Wie gruppiere ich Ergebnisse mit Eloquent?
Tabelle: Probleme
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
Mein Problem ist, dass ich es sortieren muß (ganz einfach!), Aber ich möchte nur eine von jedem Magazin (Spalt magazine_id) erhalten.
Meine Eloquent Abfrage ab jetzt ist:
$issues = Issue::where('stock', ($all ? '>=' : '>'), 0)
->orderBy('year', 'desc')
->orderBy('yearly_issue', 'desc')
->take($perpage)
->get();
Ich dachte Zugabe der groupBy('magazine_id')
würde helfen, aber es scheint, als ob es nur zum Teil mir hilft. Die Ergebnisse sind nicht in der richtigen Reihenfolge. Meine Frage ist also - gibt es einen leichten Weg dahin?
Ich habe mit verschiedenen Antworten auf ähnliche Fragen experimentiert, aber ich versage es vollständig zu implementieren.
Retrieving the last record in each group
oder
How to get the latest record in each group using GROUP BY?
Mehr Hilfe sehr geschätzt würde.
EDIT: Die nächstgelegene ich zur Zeit bin, ist dies:
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
Allerdings ist es mir nicht das gewünschte Ergebnis überhaupt gibt.
Super! =) Das hat mein Wochenende gerettet. – Andreas
Uuuuu! Das war wirklich ein Lebensretter. Danke vielmals! –
vielen Dank, das ist die beste Lösung –