我在User实体和Post实体之间有一个oneToMany关系。每个用户都可以根据需要创建muck帖子。表格如下:
User(id, name)
Post(id, post_owner_id, content, date) // post_owner_id is the foreign key
我的目标是获取创建帖子的最后用户。我开始时:
SELECT *
FROM `post`
ORDER BY post_date DESC
LIMIT 0 , 30
它给了我正确的结果。但是当我添加GROUP BY post_user_id
时,它会将结果缩小到每个用户只有一行但是没有日期。我错过了什么?
我相信我需要一个JOIN才能获得最终目标,但我需要先找到第一部分的解决方案。非常感谢您的帮助。
答案 0 :(得分:1)
我需要一个用户表,其中包含上一篇文章的日期。
SELECT post_owner_id, max(date) as maxdt
FROM `post`
group by post_owner_id
order by maxdt desc
limit 0,30
select id, maxdt, name
from (
SELECT post_owner_id, max(date) as maxdt
FROM `post`
group by post_owner_id) t join `User` u on u.id = t.post_owner_id
您甚至不需要子查询。
SELECT u.id, u.name, max(p.`date`) as maxdt
FROM `post` p
JOIN `User` u on u on u.id = p.post_owner_id
group by u.id, u.name