Я пытался понять это в течение некоторого времени и просто не могу заставить его работать. У меня есть таблица, которая выглядит примерно так.Как упорядочить сгруппированные результаты с помощью «Красноречивого»?
Таблица: Проблемы
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?
Дополнительная помощь была бы оценена.
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
Однако это не дает мне желаемого результата вообще.
Awesome! =) Это спасло мои выходные. – Andreas
Uooow! Это была настоящая жизнь. Большое спасибо! –
спасибо, что это лучшее решение –