我正在编写一个脚本来处理类似于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的。
答案 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); } } } }