Mysql 1:n JOIN SELECT查询

时间:2017-05-28 09:16:39

标签: mysql

我有一个Web应用程序,用户可以在其中发帖,其他用户可以发表评论。我正在使用mysql数据库来保存我的数据。目前我有两张桌子。一个有所有帖子,一个有所有评论。我的评论表上有外键postID。我现在的问题是如何将数据库中的数据恢复到我的应用程序。我尝试了以下查询,但它不起作用。我会在一分钟内解释原因。这是我尝试的查询:SELECT posts.title, posts.body, comments.userID, comments.comment FROM posts INNER JOIN comments ON posts.postID = comments.postID WHERE posts.postID = comingfromwebapp。问题是如果没有任何评论没有进来。如果有多个评论并且帖子太大,查询的结果太大,因为在每一行中我收到相同的帖子。每个评论的人。实现这个的正确方法是什么?我是SQL数据库的新手,之前只使用过NOSQL。

2 个答案:

答案 0 :(得分:3)

这就是我们LEFT OUTER JOIN for。

的内容

即使系统中还没有评论,这至少会返回帖子(请注意:您的评论。*值将返回为NULL - 您必须为此做好准备)

SELECT posts.title, posts.body, comments.userID, comments.comment 
   FROM posts 
  LEFT OUTER JOIN comments ON posts.postID = comments.postID 
WHERE posts.postID = comingfromwebapp

<强> BUT

这将获取一个帖子的每个评论的完整帖子标题和正文。这太过分了。

您可能需要考虑制作一个用于获取发布数据的SQL和一个用于获取该帖子ID的所有注释的(可能返回0行):

SELECT posts.title, posts.body
   FROM posts WHERE postid = commingfromwebapp

(显示你的帖子)

SELECT comments.userID, comments.comment 
   FROM  comments WHERE comments.postID = comingfromwebapp

(显示所有评论,如果有的话)

答案 1 :(得分:1)

我建议使用两个不同的查询。 1-来取帖, 2-以获取他们的评论。

在您的应用上显示时,您可以将它们组合起来