我有一个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。
答案 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-以获取他们的评论。
在您的应用上显示时,您可以将它们组合起来