Как получить правильную сортировку при группировке?
Есть исходные данные отсортированные по ID
id | book_id |
---|---|
306 | 51 |
305 | 48 |
304 | 51 |
303 | 48 |
302 | 51 |
301 | 51 |
300 | 13 |
MySQL: SELECT id, book_id FROM chapters ORDER BY id DESC LIMIT 5;
Laravel: Chapter::select('id', 'book_id')->orderBy('id', 'DESC')->take(5)->get();
Сейчас всё правильно, но без группировки.
Добавляем группировку в запрос:
MySQL: SELECT id, book_id FROM chapters group by book_id ORDER BY id DESC LIMIT 5;
Laravel: Chapter::select('id', 'book_id')->groupBy('book_id')->orderBy('id', 'DESC')->take(5)->get();
И получаем на выходе
id | book_id |
---|---|
303 | 48 |
301 | 51 |
300 | 13 |
... | ... |
Вопрос: Как построить запрос так (MySQL or Laravel), что бы на выходе получить именно отсортированные по "id" и при этом без дубликатов "book_id" ?
То есть относительно исходной таблицы, нужно получить что-то такое:
id | book_id |
---|---|
306 | 51 |
305 | 48 |
300 | 13 |
... | ... |
Ответы (1 шт):
-- Создаем таблицу
CREATE TABLE chapters (
id INTEGER PRIMARY KEY,
book_id INTEGER NOT NULL
);
-- Добавляем данные в таблицу
INSERT INTO chapters (id, book_id) VALUES
(306, 51),
(305, 48),
(304, 51),
(303, 48),
(302, 51),
(301, 51),
(300, 13)
;
-- Выборка данных
SELECT
max(id) as id,
book_id
FROM
chapters
GROUP BY
book_id
ORDER BY
id DESC;