PHP / MySql选择与回复分组的注释

时间:2011-03-07 17:12:59

标签: php mysql sql

我正在编写一个脚本来处理类似于facebook的状态/回复的评论。基本上,一个项目可以有注释,用户可以回复该注释(最高一级)。

我的表格设置如下:

Comments: [ Comment_ID | User_ID | Content | etc...]
Comments_Reply: [ Comment_ID | Is_Reply_To ] 

因此,如果用户回复评论#555,它会像评论一样出现在评论表中,那么在[555 |]中也会在Comments_Reply中获取一行。 新评论ID ]

如何选择注释,使其符合以下顺序:

[ 555 | ....
[ New Comment that replies to 555
[556 | ....
[557 | ....

等等......回复后的回复显示回复。我正在使用PHP& MySQL的。

2 个答案:

答案 0 :(得分:7)

好的,我想我现在得到了你想要的东西。我没有办法快速测试这个函数的MYSQL版本,但SQLite版本运行良好,根据文档,MySQL应该工作得很好。可能是在MySQL上更好的方法。

<强> SQLite的:

SELECT a.*, IFNULL( b.Is_Reply_To, a.Comment_ID ) as Is_Reply_To FROM Comments a LEFT JOIN Comments_Reply b HAVING(Comment_ID) ORDER BY Is_Reply_To ASC, a.Comment_ID ASC

<强>的MySQL

SELECT a.*, IF( IS NULL(b.Is_Reply_To), a.Comment_ID, b.Is_Reply_To ) as Is_Reply_To FROM Comments a LEFT JOIN Comments_Reply b HAVING(Comment_ID) ORDER BY Is_Reply_To ASC, a.Comment_ID ASC

这为我的SQLite产生了这些结果。

Comment_ID Is_Reply_to
1          1
10         1
11         1
2          2
12         2
3          3
13         3
14         3
4          4
5          5
6          6
7          7
8          8
9          9
15         15

答案 1 :(得分:0)

您可以使用以下查询

$q="select * from comments";
$rs=mysql_query($q);
if($rs && mysql_num_rows($rs))
{
 while($rd=mysql_fetch_object($rs))
{
  echo($rd->comment_id);
  $q1="select * from comments_reply where comment_id=".$rd->comment_id;
  $rs1=mysql_query($q1);
  if($rs1 && mysql_num_rows($rs1))
   { 
     while($rd1=mysql_fetch_object($rs1))
     {
       echo($rd1->comments_id);
     }
  }
 }
}