【发布时间】:2011-08-17 23:19:09
【问题描述】:
我已经在这里和其他地方阅读了 10 多篇相关帖子,但仍然无法弄清楚这一点,因为我对 php 和 MySQL 还很陌生:
我正在使用 WordPress 并尝试在旧主题中实现嵌套 cmets。我的表已设置完毕(我们称其为“cmets”)并具有以下字段:
comment_ID | comment_date | comment_parent, etc.
comment_parent 在顶级 cmets 中保持 等于 0;它等于嵌套回复中回复的评论的 comment_ID。
原始的 MySQL 查询如下所示:
SELECT * FROM $wpdb->comments
WHERE comment_post_ID = %d AND comment_approved = '1'
ORDER BY comment_date ASC LIMIT %d"
通过跟随并输出评论列表的php,cmets按日期列出,不考虑嵌套回复:
comment_ID | comment_date | comment_parent
100 Jan 01 0 (this is a top level comment)
104 Jan 03 0 (this is a top level comment)
106 Jan 04 100 (this is a reply to the first comment)
108 Jan 05 104 (this is a reply to the second comment)
显然,由于我是按日期排序的,所以顺序被破坏了。评论 106 应该出现在评论 100 的正下方,评论 108 应该出现在评论 104 的下方。
我正在尝试不更改我的 php,我想使用 MySQL 查询来执行此操作,但无法正确处理。我曾尝试按照类似问题中的建议使用 JOIN、GROUP BY、HAVING,但没有任何成功。有没有办法让我从查询中实现正确的排序并保持我的 php 完整?
【问题讨论】:
-
您好!欢迎来到 SO!即使您确实创建了这样的查询,您不会得到重复的内容吗?直到“嵌套评论”列的所有列都将包含相同的数据。然后,您必须编写代码来“忽略”前面的列”。您可能想尝试查看 Fowler 的“依赖映射”模式 - 它不会在 MySQL 中使用,可能需要在代码中处理。
-
您可以先一次性获取所有顶级 cmets,然后在第二轮中获取嵌套的 cmets(全部)并相应地填充您的内容。或者根据上述内容编写一些重要的代码以使其正确。 AFAIK 可能无法在不重复内容的情况下进行查询。我也想知道这个问题的解决方案,到目前为止我就是这样处理的!
-
我在使用 JOIN 时曾想知道重复内容的问题,但由于我一开始无法让它工作,所以我从来没有找到答案。我曾希望我可以编写一个足够扭曲的查询,以便简单地对我的行进行排序而不重复......我会研究相关映射,谢谢!
-
这个:link 是最接近我在这里找到的解决方案,但无法让它工作,给我语法错误
标签: mysql sorting comments nested