目前我正在运行一个查询以获取用户的所有帖子,然后在循环中,我正在查询该特定帖子的最新3条评论。效率极低;我一遍又一遍地查询每个帖子。
我想整合我的查询,以便我只查询所有帖子一次,对于那些特定帖子的所有评论只查询一次。目前我有一个以逗号分隔的列表,我为该用户的所有帖子(例如“1,5,18,9”)
posts
表:
posts
。ID posts
。用户ID comments
表:
comments
。ID comments
。relid(这是postid)comments
。用户ID 查询应该使用我拥有的$ posts_list,这是以逗号分隔的帖子列表。或者是该用户的所有帖子的子选择,但这似乎效率低下,因为我已经在字符串中有了帖子列表。
非常感谢您的帮助!
答案 0 :(得分:2)
尝试此查询 -
SELECT p.id, p.userid, c.id, c.userid
FROM posts p
JOIN (
SELECT c1.*, COUNT(*) rank FROM comments c1
LEFT JOIN comments c2
ON c2.relid = c1.relid AND c2.id <= c1.id
GROUP BY c1.relid, c1.id
) c
ON p.id = c.relid
WHERE rank < 4
并添加你需要的条件,即 - WHERE p.userid IN(1,5,18,9)。