用于获取按日期排序的创建内容的最后用户的SQL查询

时间:2016-04-15 13:16:55

标签: mysql sql

我在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才能获得最终目标,但我需要先找到第一部分的解决方案。非常感谢您的帮助。

1 个答案:

答案 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