所以我有两个表,文章和评论(有一对多的关系(1篇文章 - 许多评论))。这就是表的结构:
文章 - id(prikey),title,publicationDate,content
评论 - com_id(prikey),作者,评论,id(外键)
我用它来查询两个表:
SELECT * FROM articles as a INNER JOIN comments as c ON a.id = c.id
以前,我只使用以下方式显示文章表:
<?php
while($row = mysqli_fetch_array($query)) {
echo "
<div id='article'>
<header>
<hgroup>
<h2>".$row['title']."</h2>
<h4>Posted on ".$row['publicationDate']."</h4>
</hgroup>
</header><p>".$row['content']."</p></div>";
}
?>
显示所有文章(包括日期,标题,内容等)。现在有评论。如何编辑php代码(或者如果我的查询不正确,如何编写查询),以便它显示所有文章和每篇文章的所有评论,如:
Article One
-- Comment 1
-- Comment 2, etc.
Article Two
-- Comment 1
-- Comment 2, etc.
答案 0 :(得分:2)
另一种方法是将查询拆分为两个。
第一个会带回你想要的文章......
SELECT * FROM article;
获得后,您可以获取所有ID并使用以下内容
SELECT * FROM comments WHERE article_id IN (".$list.");
这会将MySQL查询限制为2,同时获取所需的所有数据。在循环文章数据之后,在该循环中,循环注释数据。
这也意味着,与使用GROUP_CONCAT不同,您还可以使用作者数据。
这不是一个非常有说服力的解决方案,但应该有效。
答案 1 :(得分:1)
使用类似
的内容SELECT a.article
,GROUP_CONCAT(CONCAT('<p>', c.comment, '</p>') SEPARATOR "\n") as comments
FROM
article a
INNER JOIN comment c ON (c.article_id = a.id)
WHERE a.id = '12454';
您可能需要对分隔符进行一些操作。
请参阅:http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat
请注意:
结果被截断为group_concat_max_len系统变量给出的最大长度,该变量的默认值为1024.尽管返回值的有效最大长度受到值的约束,但该值可以设置得更高。 max_allowed_packet的。在运行时更改group_concat_max_len值的语法如下,其中val是无符号整数:
SET [GLOBAL | SESSION] group_concat_max_len = val;
请在此处查看如何更改max_allowed_packet
http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_max_allowed_packet
答案 2 :(得分:1)
查询:
SELECT c.author, c.comment,
a.id article_id, a.title, a.publicationDate, a.content
FROM comments c
RIGHT JOIN articles a
ON c.id = a.id
PHP:
<?php
$lastArticleId = 0;
$isNewArticle = false;
while($row = mysqli_fetch_array($query)) {
$isNewArticle = ($lastArticleId != $row['article_id']) ? true : false;
if($isNewArticle) {
$lastArticleId = $row['article_id']; ?>
<div class="article">
<header>
<hgroup>
<h2><?php echo $row['title']; ?></h2>
<h4>Posted on <?php echo $row['publicationDate']; ?></h4>
</hgroup>
</header>
<p><?php echo $row['content']; ?></p>
</div>
<?php
}
if($row['comment'] != '') { ?>
<p><strong><?php echo $row['author']; ?></strong> - <?php echo $row['comment']; ?></p>
<?php
} ?>
<?php
} ?>
答案 3 :(得分:0)
查看MySQL GROUP_CONCAT,它将返回以逗号分隔的项目列表。然后,您可以将其分解为评论部分。
答案 4 :(得分:-1)
一旦有人评论文章插入文章ID与该评论,然后相应地得到这样的东西
一旦一个人选择一篇文章来阅读$ _GET中的文章内容,你就可以阅读文章内容了。一旦有人对该文章发表评论,请将其插入如下
$sql = mysql_query("INSERT INTO comments_table (subject,article_id,comments) VALUES ('$subject','$_GET['id']','$comments')");
以及稍后当你拉动它们的方式与$_GET
中的文章ID相同
你可以访问它运行像这样的查询
$fetch = mysql_query("SELECT * FROM comments WHERE article_id = $_GET['id'] ORDER BY id DESC") or die(mysql_error());
希望这会起作用