2010-01-12 69 views
1

是否可以通过一个sql查询打印出(PHP)我所有的博客文章+相关评论?如何用一个sql查询打印帖子和评论

如果是这样,怎么样?

我想在这个方向:

SELECT p.post_id, p.title, c.comment_body 
FROM posts p 
LEFT JOIN comments c 
ON c.parent_id = p.post_id 

但如我所料

+0

为什么不按预期工作? – 2010-01-12 14:27:37

+0

您希望结果看起来如何? – 2010-01-12 14:30:40

+0

你明确地将它标记为mysql/join,但也许你想尝试http://www.mongodb.org/display/DOCS/PHP+Language+Center'MongoDB(来自“humongous”)是一个可扩展的高性能,开源,无模式,面向文档的数据库。“ – VolkerK 2010-01-12 14:45:21

回答

0

我能想到的最简单的方法是通过所有的行迭代返回,他们这个组没有奏效转换为关联数组,其中键是发布ID。然后,您可以遍历该关联数组并打印每个帖子的评论,从组中的第一行获取帖子标题。

0

当获取数据时,只需使用字段名称: $ result = mysql_query(“SELECT p.post_id,p.title,c.comment_body FROM posts p LEFT JOIN comments c ON c.parent_id = p.post_id”) ;

while($row = mysql_fetch_array($result)) 
    { 
    echo $row['title'] . " " . $row['comment_body']; 
    echo "<br />"; 
    } 

来源:http://www.tizag.com/mysqlTutorial/mysqljoins.php

+0

但是如果有多个评论呢? – Bundy 2010-01-12 14:42:11

+0

对于下一条评论 – Scott 2010-01-12 15:03:33

0

如果你使用MySQL,你可以使用GROUP_CONCAT功能:

SELECT p.post_id, p.title, GROUP_CONCAT(c.comment_body) 
FROM posts 
LEFT JOIN comments c ON c.parent_id = p.post_id 
GROUP BY p.post_id 
0

对于MySQL:

SELECT p.post_id, p.title, GROUP_CONCAT(c.comment_body), count(*) as coment_cnt 
FROM 
    posts p 
     LEFT JOIN comments c ON (p.post_id = c.parent_id) 
GROUP BY 
    p.post_id 
0

“但这并没有按照我的预期工作“

...但你不说你的期望。

假设在查询中隐含的模式是正确的,那么它是没有道理的,只显示帖子一次:

$lastpostid=false; 
while ($r=mysql_fetch_assoc($result)) { 
    if ($r['post_id']!=$lastpost) { 
    print "Post: " . $r['title'] . "<br />\n"; 
    $comment_id=1; 
    $lastpost=$r['post_id']; 
    } 
    print "Comment # $comment_id : " . $r['comment_body'] . "<br />\n"; 
    $comment_id++; 
} 

但正如我所说,这意味着你的查询是正确的(即评论不是分层的)。

C.

4

使用一个SQL查询不是很方便,因为您有1个帖子和多个注释。
将帖子详细信息添加到每个评论(在组合查询中)是浪费资源。

获取帖子的详细信息并使用帖子的post_id查找属于该帖子的评论要方便得多。

+0

+1,它应该是$ row ['comment_body'] [1]。这是一个需要两个查询的情况 - 这是一个一对多的关系到评论的帖子。只有当它是一对一的关系时,才能尝试从两个表中获取数据并进行连接。 – 2010-01-12 15:14:24

+0

同意。这绝对是一种使用一个查询没有意义的情况。 – inxilpro 2010-01-12 15:28:00

+0

我需要这个,因为我想创建一个包含所有数据的XML文件(所有文章+10个最近的评论/文章)。当你有100个帖子时,我不知道最好的解决方案是什么。这意味着你必须执行100个SQL查询? – Bundy 2010-01-12 15:43:19