mysql/php:显示帖子和每个帖子的所有评论

Posted

技术标签:

【中文标题】mysql/php:显示帖子和每个帖子的所有评论【英文标题】:mysql/php: show posts and for each post all comments 【发布时间】:2012-05-02 12:27:29 【问题描述】:

我知道这个问题已经被问过多次(但是,我仍然找不到解决方案):

php mysql showing posts with comments mysql query - blog posts and comments with limit mysql structure for posts and comments ...

基本问题:有表 postscmetsuser...你能用一个选择语句选择并显示所有帖子和所有 cmets(带有comment.user、comment.text、comment.timestamp)?这样的 select 语句会是什么样子?如果没有,最简单的解决方案是什么?

我还尝试将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

我想知道这个问题是不是很常见,有帖子和 cmets 要显示...?

提前感谢您的每一个帮助!

【问题讨论】:

您好,我想知道如何实时更新它们? @Sarah:你是什么意思?你能提供更多细节吗? 【参考方案1】:

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

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

请注意,如果您只是想获取计数、总和之类的东西,最好缓存其中的一些信息。例如,您可能希望将评论计数缓存在 post 表中,而不是在每个查询中计算它们。仅在添加/删除评论时计算和更新评论数。

编辑: 意识到您还希望将用户数据附加到每个评论。您可以多次加入同一张表,但它会变得很难看。这可能会变成一个非常昂贵的查询。我还包括一个如何给列加上别名的示例,这样就不那么容易混淆了:

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

【讨论】:

感谢 dubj 的回答!我试图加入 cmets 表,但正如我所写,我要么多次收到带有多个 cmets 的帖子,要么每次收到一个帖子,但只有一条评论......在你的选择中:我如何为每个帖子回显所有厘米??多谢! :) 自从我编写原始 sql 以来已经有一段时间了,但我相信这将为每条评论返回一行,并且每一行都将包含整个帖子数据,并为每条评论复制。老实说,不建议在单个查询中执行此操作。有什么理由让你一次想要所有东西吗? 感谢编辑!不......根本没有,但我想知道如何在多个查询中做到这一点?因为...你将如何在 php 中打印这个? $sql = mysql_query(SELECT...) 然后while($row=mysql_fetch_array($sql)) ... //how to show posts and comments here?? 我可以显示帖子,但是如何获得每个帖子的所有 cmets?? 遍历所有帖子并创建一个嵌套循环以遍历每个帖子上的所有 cmets。此处的伪代码:pastebin.com/Krg4TyVS 谢谢你!你已经帮了我很多了!谢谢你的努力!循环现在可以工作了,只是发现 cmets LEFT JOIN 用户有一些麻烦......它返回 1 条评论 # of users 行......但我会弄清楚的,我有信心! :) 所以,再次感谢! :)

以上是关于mysql/php:显示帖子和每个帖子的所有评论的主要内容,如果未能解决你的问题,请参考以下文章

评论显示在django的每个帖子上?

cakephp 查找所有有评论的帖子

链接到显示所有帖子的存档页面

Rails 4,ActiveRecord,查找当前用户未评论的所有帖子

缓存 MySQL 中排序所需的聚合?

获取帖子列表的最新 3 条评论