Задавайте вопросы, мы ответим
Вы не зашли.
Добрый день.
Имеется таблица комментариев со следующими полями:
id int primary key not null,
id_diss int not null,
date datetime
В поле id_diss содержаться идентификаторы тем к которым относятся комментарии, таким образом в этом поле значения не уникальны и могут повторяться. Мне нужно достать 5 последних комментариев из этой таблицы так чтобы все они относились к разным темам, т.е. по одному последнему комментарию из каждой темы. Для этого я использовал следующий запрос:
SELECT
*
FROM
Comment
GROUP BY
id_diss
ORDER BY
date DESC
LIMIT
5
Но проблема в том что таким образом я не могу достать пять последних комментариев из разных тем, так как group by отсекает лишние комментарии до того как происходит сортировка по дате и в результате я в самом деле получаю пять комментариев из разных тем, но сами комментарии в этих темах не являются последними по дате.
Вариант с DISTINCT мне не подходит, так как я здесь привел не полный запрос и в нем на самом деле еще присутствуют подзапросы которые достают название темы для каждого комментария из таблицы тем
Помогите разобраться.
Неактивен
Неактивен
vasya написал:
SELECT * FROM Comment c JOIN
(SELECT id_diss, max(`date`) md FROM Comment GROUP BY 1 ORDER BY 2 DESC LIMIT 5) t ON c.id_diss=t.id_diss and c.`date`=t.md;
После этого ответа пришло понимание что ни черта я не знаю в SQL. Спасибо за ответ, запрос работает, только не совсем понял как он работает. Если не затруднит не могли бы вы дать пояснения к запросу.
Неактивен
Сначала для каждой темы выбирается последний комментарий - SELECT id_diss, max(`date`) md FROM Comment GROUP BY 1
потом отсекаются 5 последних - ORDER BY 2 DESC LIMIT 5
и полученный результат записывается во временную таблицу t, которая объединяется (join) с таблицей Comment для получения остальных столбцов, соответствующих полученным значениям id_diss и date.
Неактивен