【发布时间】:2015-11-08 11:42:17
【问题描述】:
我正在参加一些在线课程,在其中一项练习中,我们将为博客创建两个表 - 博客文章和博客文章 - 并通过外键将它们连接起来,然后显示两者中的所有内容。评论应该只链接到特定的文章,同时也允许多个 cmets。
我的尝试:
function list_articles() {
include('core/db/db_connection.php');
$sql = "SELECT blog.title, blog.content, blog.posted_by, blog.date, article_comments.comments, article_comments.comment_by
FROM blog LEFT OUTER JOIN article_comments
ON blog.content_id = article_comments.content_id
WHERE blog.content != ''
ORDER BY blog.content_id DESC";
$result = mysqli_query($dbCon, $sql);
while ($row = mysqli_fetch_array($result)) {
echo
"<h5 class='posted_by'>Posted by " . $posted_by = $row['posted_by'] . " on " . $row['date'] . "</h5>" .
"<h1 class='content_headers'>" . $title = $row['title'] . "</h1>" .
"<article>" . $content = $row['content'] . "</article>" .
"<div class='commented_by'>Posted by: " . $row['comment_by'] . "</div>" .
"<div class='comments'>Comments: " . $row['comments'] . "</div>";
}
}
这就是我在数据库中插入 cmets 的方式:
function insert_comments($comment_by, $comments) {
include('core/db/db_connection.php');
$sql = "SELECT blog.content_id, article_comments.blog_id
FROM blog AS blog
INNER JOIN article_comments AS article_comments ON article_comments.blog_id > blog.content_id";
mysqli_query($dbCon, $sql);
}
在 PHPMyAdmin 中,外键可以正常工作,并且 cmets 链接到特定文章。我想将其转置在网页上。当我在页面上插入新文章时,它可以正常工作,但是当我尝试为该文章插入评论时,它不会显示它。
如果我将ON blog.content_id = article_comments.content_id 更改为ON blog.content_id = article_comments.blog_id(blog_id 是外键的字段名称) - 它会显示一篇文章的所有 cmets - 但它会为与之关联的每个评论复制该文章。这有任何意义吗?我尽力解释它。如果您需要进一步澄清,请告诉我。谢谢
顺便说一下,这是我用来创建外键的语句:
ALTER TABLE article_comments ADD CONSTRAINT comment_blog_fk FOREIGN KEY (blog_id) REFERENCES wt.blog(content_id) ON DELETE NO ACTION ON UPDATE CASCADE;
编辑:我用ON blog.content_id = article_comments.blog_id得到的结果
Article title: LOREM IPSUM
Content: LOREM IPSUM DOLOR SIT AMET....
--------------------------------------
Name: DSK
Comment: Great article!
-- HERE IT DUPLICATES THE ARTICLE TO INSERT A NEW COMMENT --
Article title: LOREM IPSUM
Content: LOREM IPSUM DOLOR SIT AMET....
--------------------------------------
Name: DSK
Comment: Great article! - 2nd comment
如您所见,它会为插入的每条评论复制文章。所以我最终得到了两篇包含不同 cmets 的重复文章。如果我有 100 个 cmets,这篇文章将被复制 100 次
我期望的行为:
Article title: LOREM IPSUM
Content: LOREM IPSUM DOLOR SIT AMET....
-------------------------------------- \\ COMMENTS \\
Name: DSK
Comment: Great article!
--------------------------------------
Name: DSK
Comment: Great article! - 2nd comment
【问题讨论】:
-
我在您的问题中只看到 SELECT,但没有看到 INSERT。插入数据或选择时出现问题?
-
@DanilaGanchar 现在,我直接通过数据库接口插入数据,直到我弄清楚如何正确显示它,因此我的代码中没有 INSERT 语句。所以,我的问题在于显示它。在数据库中,cmets 与文章正确关联。我在页面上显示它们的方式似乎是问题所在。我选择 cmets 或文章的方式很可能存在问题。
-
你能从 db 打印你的结果吗?
-
@DanilaGanchar 请查看我的编辑,这有助于理解问题吗?