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 都是同一个表中的单独条目。无论如何,是否可以通过一个查询来执行此操作,而不必对 cmets 表进行另一个联接?
编辑,当前查询。此查询不处理回复,仅针对帖子和一级 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 帖子、评论和回复的主要内容,如果未能解决你的问题,请参考以下文章
UIWebView 未正确加载 JavaScript - 嵌入式 Facebook 帖子