Mysql - 正确排序 Facebook 帖子、评论和回复

Posted

技术标签:

【中文标题】Mysql - 正确排序 Facebook 帖子、评论和回复【英文标题】:Mysql - Ordering Facebook posts, comments, and replies correctly 【发布时间】:2013-04-22 21:26:00 【问题描述】:

似乎无法为此找到一个好的答案。我目前有两张桌子,一张是 Facebook 帖子,另一张是 cmets。除了这个,我现在还需要添加回复,因为 FB 最近这样做了。

我当前的查询从帖子中选择并加入 cmets。我希望对回复做的是在 cmets 中添加另一个条目,但带有父 ID。无论我最终遇到什么查询,我都希望结果如下所示:

postID commentID parentID
1
2      1
2      2         1
2      3         1
3      4

所以帖子 1 没有 cmets,帖子 2 有一条评论,对该评论有两条回复,而帖子 3 只有一条评论。在我的 cmets 表中,注释 1-4 都是同一个表中的单独条目。无论如何,是否可以通过一个查询来执行此操作,而不必对 cme​​ts 表进行另一个联接?

编辑,当前查询。此查询不处理回复,仅针对帖子和一级 cmets。

select facebookFeeds.*, facebookComments.userID, facebookComments.name, facebookComments.message as cMessage, facebookComments.createdTime as cCreatedTime from facebookFeeds left join facebookComments on facebookFeeds.id = facebookComments.feedID where facebookComments.accountID= 24 order by createdTime desc

【问题讨论】:

您当前使用的查询是什么? 回复是在 cmets 的表中还是在他们自己的另一个表中? 我很困惑。一个简单的LEFT JOIN 不喜欢这个工作:SELECT * FROM posts p LEFT JOIN comments c ON p.postID = c.postID 使用当前查询编辑。回复与 cmets 在同一个表中。回复实际上只是有父评论的 cmets。 【参考方案1】:

我想通了,让它在 order 子句中使用 if。唯一的缺点是父评论 ID 必须小于其回复的数字。否则,回复将显示在父评论之前。收到数据时,回复在评论之后,应该没问题。

select facebookFeeds.*, facebookComments.id as cID, parentID, facebookComments.userID, facebookComments.name, facebookComments.message as cMessage, facebookComments.createdTime as cCreatedTime from facebookFeeds left join facebookComments on facebookFeeds.id = facebookComments.feedID where facebookComments.accountID = 24 order by facebookFeeds.createdTime desc, if(parentID is null, cID, parentID)

【讨论】:

以上是关于Mysql - 正确排序 Facebook 帖子、评论和回复的主要内容,如果未能解决你的问题,请参考以下文章

像在Facebook上那样显示和订购帖子

UIWebView 未正确加载 JavaScript - 嵌入式 Facebook 帖子

嵌入式 Facebook 帖子无法在 UIWebView 中正确显示

如何正确排序我的评论/回复/回复以回复数据

如何按日期对字典数组进行排序?

Facebook 类型的新闻提要 Mysql 查询无法正常工作