>我有一个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
.问题是如果评论为零,则不会有任何内容。如果有多个评论并且帖子太大,则查询的结果太大,因为在每一行中,我都会收到每条评论的相同posts.body。实现这一点的正确方法是什么?我对SQL数据库相当陌生,以前只使用过NOSQL。
我们LEFT OUTER JOIN
的目的。
即使系统中还没有评论,这至少会返回帖子(注意:您的评论.*值将返回为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
但
这将获取给一个帖子的每个评论的完整帖子标题和正文。这是矫枉过正。
您可能需要考虑创建一个 SQL 来获取帖子数据,另一个(可能返回 0 行(用于获取该帖子 ID 的所有评论:
SELECT posts.title, posts.body
FROM posts WHERE postid = commingfromwebapp
(显示您的帖子(
SELECT comments.userID, comments.comment
FROM comments WHERE comments.postID = comingfromwebapp
(如果有,则显示所有评论(
我建议使用两个不同的查询。1-获取帖子,2-获取他们的评论。
在应用程序上显示时,您可以将它们组合在一起