不知道您的数据库结构,它应该看起来像这样。请注意,您应该用*
实际需要的更明确的列列表替换字符。
SELECT p.*, c.*, u.* FROM posts p
LEFT JOIN comments c ON c.post_id = p.id
LEFT JOIN users u ON u.id = p.author_id
请注意,如果您只是想获取计数,总和之类的东西,则最好缓存其中的一些信息。例如,您可能希望将评论计数缓存在发布表中,而不是对每个查询都进行计数。仅在添加/删除评论时计算和更新评论数。
意识到您还希望将用户数据附加到每个注释。您可以多次加入同一张表,但是它很难看。这可能会变成一个非常昂贵的查询。我还提供了一个有关如何为列添加别名的示例,以减少混乱:
SELECT p.*, c.*, u.name as post_author, u2.name as comment_author FROM posts p
LEFT JOIN comments c ON c.post_id = p.id
LEFT JOIN users u ON u.id = p.author_id
LEFT JOIN users u2 ON u2.id = c.author_id