Как получить правильную сортировку при группировке?
Есть исходные данные отсортированные по 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;