我的数据库中有2个表,User
和Post
。第一个表是存储用户的个人数据,第二个表是用户存储帖子。
我想构建1个查询以获取每个用户的最新N个帖子,我能够通过循环每个用户并获取最新帖子并将它们存储在数组中以便稍后获得多个查询,但性能也是如此由于用户和帖子太多(超过20000个用户),我无法继续上传。
所以我需要一些动态查询来获取这些帖子,当然我会为它添加一些分页。
提前致谢。
答案 0 :(得分:1)
您需要阅读JOIN以针对多个表编写单个查询。
例如:select post from posts join users on posts.poster_id = users.user_id
为了获得良好的性能,请确保您的索引设置正确,通常在poster_id上,但它还取决于您在where子句中使用的列。
您可以在其末尾添加where子句,仅返回特定时间或用户的帖子。分页更棘手,取决于您正在使用的数据库。
我使用的分页(在SqlServer 2008r2中,使用Sql2012可以完全不同):
SELECT <columns>
FROM (SELECT ROW_NUMBER() OVER (ORDER BY Time DESC) as RowNum, * from <query>) as RowConstrainedResult
WHERE RowNum >= X AND RowNum < Y
ORDER BY RowNum
用相关行号(例如101和200)替换列,查询和X和Y
答案 1 :(得分:0)
SELECT u.user, p.posts FROM user u
LEFT JOIN Post p
ON u.id = p.user_id
WHERE u.id = ?
答案 2 :(得分:0)
这在MySQL中有点痛苦。以下内容将为您提供每个用户的最后十个帖子,其中post id位于以逗号分隔的列表中:
select p.userid,
substring_index(group_concat(p.postid order by postdate desc), ',', 10) as lastten
from posts p
group by p.userid;