如何在MYSQL中进行评论回复查询?

时间:2009-06-01 22:05:52

标签: sql mysql comments

我正在发表评论回复(仅限一个级别)功能。所有评论都可以有多少回复,但没有回复可以进一步回复。

所以我的数据库表结构如下所示

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查询来获取所有注释及其回复。请告诉我怎么做?

由于

3 个答案:

答案 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。