Ho cercato di capirlo da un po 'di tempo e non riesco a farlo funzionare. Ho un tavolo che sembra simile a questo.Come ordinare i risultati raggruppati usando Eloquent?
Tabella: Problemi
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
Il mio problema è che ho bisogno di risolvere la (facile!), Ma, voglio solo ottenere uno di ogni rivista (magazine_id colonna).
La mia domanda Eloquente fin d'ora è:
$issues = Issue::where('stock', ($all ? '>=' : '>'), 0)
->orderBy('year', 'desc')
->orderBy('yearly_issue', 'desc')
->take($perpage)
->get();
ho pensato di aggiungere il groupBy('magazine_id')
avrebbe aiutato, ma sembra come se mi aiuta solo in parte. I risultati non sono nell'ordine corretto. Quindi, la mia domanda allora è - c'è un modo semplice per aggirare questo?
Ho sperimentato varie risposte a domande simili ma non riesco a implementarlo completamente.
Retrieving the last record in each group
o
How to get the latest record in each group using GROUP BY?
Più aiuto sarebbe molto apprezzato.
EDIT: Il più vicino che Attualmente è questo:
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
Tuttavia, non mi sta dando il risultato desiderato a tutti.
Impressionante! =) Che ha salvato il mio weekend. – Andreas
Uooow! E 'stato davvero un salvavita. Molte grazie! –
grazie mille questa è la migliore soluzione –