Как получить пользователей с последними комментариями в mysql?
Написать SQL запрос к СУБД MySQL, который выберет из базы имена пользователей и их последние комментарии (по одному комментарию на каждого пользователя), при следующей структуре таблиц:
CREATE TABLE `db_user` (
`db_user_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`balance` decimal(10,2) NOT NULL,
PRIMARY KEY (`db_user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
CREATE TABLE `db_comment` (
`db_comment_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`db_user_id` int(10) unsigned NOT NULL,
`text` text NOT NULL,
PRIMARY KEY (`db_comment_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
У меня такой вариант решения, подойдёт ли он ?
SELECT db_user.name, db_comment.text
from db_user
left join db_comment
on db_user.db_user_id = db_comment.db_user_id
WHERE db_comment.db_comment_id = (SELECT MAX(db_comment.db_comment_id) FROM db_comment);
Ответы (1 шт):
Автор решения: Yitzhak Khabinsky
→ Ссылка
Попробуйте следующее решение.
SELECT с участием ROW_NUMBER() внутри CTE предоставит способ найти последний комментарий на каждого пользователя.
SQL
WITH cte AS (
SELECT
db_user_id,
text,
ROW_NUMBER() OVER (
PARTITION BY db_user_id
ORDER BY db_comment_id DESC) row_num
FROM db_comment
)
SELECT db_user.name, cte.text
FROM db_user left outer join cte
on db_user.db_user_id = cte.db_user_id
WHERE COALESCE(cte.row_num, 1) = 1;