2012-04-20 80 views
3

我知道这个问题已经被问多次(但是,我仍然无法找到一个解决方案):的MySQL/PHP:显示帖子,并为每个帖子所有评论

基本问题:有表帖子评论用户 ...你可以用一个单一的选择语句选择并显示所有帖子和所有评论(与comment.user,comment.text,comment.timestamp)?这样的选择语句如何看起来像?如果不是,最简单的解决方案是什么?

我也试图JOINcomments表与posts表并使用GROUP BY,但我得到的每一行或每个评论,但还那些帖子多次在任只有一个评论!?

我试着第一个链接(嵌套的mysql_query,然后取)以及第二个链接(与数组)的解决方案。然而,第一个造成了一堆的错误(该文章中的语法似乎不正确,我无法弄清楚如何解决它),在第二次我遇到了数组问题。

我的查询看起来像这样至今:

SELECT p.id, p.title, p.text, u.username, c.country_name, (SELECT SUM(vote_type) FROM votes v WHERE v.post_id = p.id) AS sum_vote_type FROM posts p LEFT JOIN user u ON (p.user_id = u.id) LEFT JOIN countries c ON (c.country_id = u.country_id) ORDER BY $orderby DESC 

我在想,如果这个问题是不是很常见,有文章和评论以示...?

感谢您提前给予的帮助!

+0

嗨,我想知道我怎么可以更新他们两个呢? – Sarah 2012-09-21 08:50:41

+0

@Sarah:你是什么意思?你能提供更多的细节吗? – Chris 2012-09-21 13:14:21

回答

7

不知道你的数据库结构,它应该看起来像这样。请注意,您应该将*字符替换为您实际需要的更明确的列列表。

SELECT p.*, c.*, u.* FROM posts p 
LEFT JOIN comments c ON c.post_id = p.id 
LEFT JOIN users u ON u.id = p.author_id 

请注意,如果您只是想获得计数,总和和类似的东西,缓存一些信息是一个好主意。例如,您可能想要在帖子表中缓存评论数量,而不是对每个查询进行计数。只有在添加/删除评论时才计算并更新评论计数。

编辑: 意识到你也想附加用户数据到每个评论。您可以多次加入同一个表格,但会变得很难看。这可能会变成一个非常昂贵的查询。我还包括一个如何别名列的例子,所以它不那么容易混淆:

SELECT p.*, c.*, u.name as post_author, u2.name as comment_author FROM posts p 
LEFT JOIN comments c ON c.post_id = p.id 
LEFT JOIN users u ON u.id = p.author_id 
LEFT JOIN users u2 ON u2.id = c.author_id 
+0

谢谢你的回答!我尝试加入评论表,但是按照我的说法,我要么多次收到多条评论,要么每次发表一条评论,但只有一条评论......在您的选择中:我如何回复每篇文章的所有内容注释??多谢! :) – Chris 2012-04-20 22:40:40

+0

自从我写了原始sql以来已经有一段时间了,但我相信这会为每条评论返回一行,并且每行都会包含整个发布数据,并为每条评论重复一次。老实说,不建议在单个查询中完成此操作。你有没有理由一次要一切? – dubj 2012-04-20 22:44:38

+0

thx编辑!没有...没有,但我想知道如何在多个查询中做到这一点?因为...你如何在PHP中打印这个? '$ sql = mysql_query(SELECT ...)'然后'while while($ row = mysql_fetch_array($ sql)){... //如何在这里显示帖子和评论??'我可以显示帖子,但怎么做我收到每条帖子的所有评论?? – Chris 2012-04-20 22:46:49