我在这样的mysql数据库中有一个表:
Postings (id, content, user_id, create_date)
现在,对于十个用户(user_id),我想检索他的五个最新帖子(id)。一种简单的方法是在一个查询中计算出 10 个具有最新帖子的用户,然后触发 10 个单独的查询以获取每个用户的最新 5 个帖子。有没有更简单的方法把它放在一个或两个查询中?
用这个
SELECT * FROM (SELECT * FROM TABLE ORDER BY ID DESC LIMIT 5) AS ttbl ORDER BY ID ASC;
这里括号内的代码以相反的顺序显示最新的 5 个帖子。这样数据首先存储在 ttbl 中,然后以适当的顺序再次排序以获得所需的结果。
希望它可以解决你
这是我想到的一种可能的解决方案(未经测试)。这会在单个列中返回每个用户的 ID。这不会是最快的查询。
这只是返回 id,而不是帖子本身。老实说,我认为您应该按照最初的想法进行多个查询。
Select
(Select group_concat(id order by id desc)
From postings g
Where g.user_id=s.user_id
Limit 5) ids
From (
Select user_id
From postings p
Group by user_id
Order by id desc
Limit 10) s
另外,请查看类似问题的答案: 如何选择每个类别的最新四个项目?