在单个MySQL查询中发布注释

在单个MySQL查询中发布注释,mysql,comments,posts,Mysql,Comments,Posts,我陷入了一个非常恼人的问题。我在我的网站上有一个简单的帖子和评论部分,就像一个博客I-e,两个表格帖子和评论: 帖子->idpost、标题、文本、日期 评论->idcomment,idpost\u cmt,电子邮件,消息,idcomment\u cmt 很简单。 idpost_cmt->posts表的外键 如果有人对已经存在的注释发送注释,则将使用注释表i-e中的最后一个字段idcomment\u cmt: 职位 |_评论1 |_评论2 |_评论3 |_评论4 __|_评论4.1 __|_评论4

我陷入了一个非常恼人的问题。我在我的网站上有一个简单的帖子和评论部分,就像一个博客I-e,两个表格帖子和评论:

帖子->idpost、标题、文本、日期 评论->idcomment,idpost\u cmt,电子邮件,消息,idcomment\u cmt

很简单。 idpost_cmt->posts表的外键

如果有人对已经存在的注释发送注释,则将使用注释表i-e中的最后一个字段idcomment\u cmt:

职位

|_评论1

|_评论2

|_评论3

|_评论4

__|_评论4.1

__|_评论4.2

|_评论5 . . . 等等

现在我想要的是在一个mysql查询中查询所有帖子和评论。我现在做的是,首先我得到所有的帖子,然后循环浏览每个帖子。在每个周期中,我使用当前帖子ID查询评论。然后循环浏览评论,在每个评论周期中,使用当前评论ID查询子评论

可以看到,通过这种方式,单个页面请求可能需要500个或更多sql查询,这对于数据库服务器来说太多了。 如果有人能帮助我实现这一目标,我将不胜感激


非常感谢…

您应该运行两个查询

获得所有职位 获取所有帖子的所有评论,包括子评论 您可以使用idpost_cmt将注释添加到组中

比如:

SELECT idpost, 
       title, 
       TEXT, 
       DATE 
FROM   posts 
ORDER  BY DATE DESC 
LIMIT  30 
SELECT idcomment, 
       idpost_cmt, 
       email, 
       message, 
       idcomment_cmt 
FROM   comments 
       JOIN posts 
         ON posts.idpost = comments.idpost_cmt 
WHERE  posts.idpost IN ( 1, 2, 3, 4 ) 
ORDER  BY idpost_cmt, 
          idcomment_cmt, 
          idcomment DESC 
第二个查询可能类似于:

SELECT idpost, 
       title, 
       TEXT, 
       DATE 
FROM   posts 
ORDER  BY DATE DESC 
LIMIT  30 
SELECT idcomment, 
       idpost_cmt, 
       email, 
       message, 
       idcomment_cmt 
FROM   comments 
       JOIN posts 
         ON posts.idpost = comments.idpost_cmt 
WHERE  posts.idpost IN ( 1, 2, 3, 4 ) 
ORDER  BY idpost_cmt, 
          idcomment_cmt, 
          idcomment DESC 

请阅读以下有关关系数据库中的分层数据的内容:。您正在使用邻接列表模型。非常感谢您。。。我要试试这个。你需要学会如何在这个论坛上接受答案。请参见投票下方答案左侧的复选标记。请这样做。