我正在发表评论回复(仅限一个级别)功能。所有评论都可以有多少回复,但没有回复可以进一步回复。
所以我的数据库表结构如下所示
Id ParentId Comment
1 0 this is come sample comment text
2 0 this is come sample comment text
3 0 this is come sample comment text
4 1 this is come sample comment text
5 0 this is come sample comment text
6 3 this is come sample comment text
7 1 this is come sample comment text
在上述结构中,有1个(有2个回复)和3个(1个回复)有回复。因此,要获取注释及其回复,一个简单的方法是首先获取所有具有ParentId为0的注释,然后通过运行while循环获取该特定commentId的所有回复。但是,如果我在特定记录上有大约200条评论,那么这似乎会运行数百条查询。
所以我想创建一个查询,它将按顺序获取带有回复的注释,如下所示;
Id ParentId Comment
1 0 this is come sample comment text
4 1 this is come sample comment text
7 1 this is come sample comment text
2 0 this is come sample comment text
3 0 this is come sample comment text
6 3 this is come sample comment text
5 0 this is come sample comment text
我的评论表中还有一个评论日期列,如果有人想在评论查询中使用它。
所以最后我想通过使用一个单独的mysql查询来获取所有注释及其回复。请告诉我怎么做?
由于
答案 0 :(得分:17)
您可以在ORDER BY中使用表达式。试试这个:
SELECT *
FROM comments
ORDER BY IF(ParentId = 0, Id, ParentId), Id
如果ParentId = 0,则首先按Id排序,否则按ParentId排序。第二个排序标准是Id,以确保按顺序返回答复。
答案 1 :(得分:1)
我强烈建议您重新构建数据库架构。主要问题是你试图将评论和回复视为同一件事,而且它们简单并不是一回事。这迫使您进行一些困难的查询。
想象一下有两个表:[评论:(id,text)],并回复另一个表中的评论[REPLIES(id,commentid,text)]。当以这种方式思考时,问题似乎更容易。
答案 2 :(得分:-2)
如果您/某人正在寻找简单的解决方案,那么它可能会有所帮助。
结构变更 - 我想你已经通过添加博客ID来改变它,如果没有博客ID,你怎么说博客特有哪些评论?
首先这样做,它不会对数据库造成任何伤害,
update `tblcomments` set ParentId=Id where ParentId=0;
然后按顺序获取博客评论和评论回复(评论 - 回复1,回复2 ......评论下)
使用bleow查询
SELECT *
FROM tblcomments
ORDER BY ParentId ASC;
干杯, -PM。