在PHP-MySql中按ID和相关答案对注释进行排序

时间:2014-05-21 07:50:08

标签: php mysql comments

我有一个MySql评论表。此表中的一些注释是"简单" 注释,其他一些注释是"回复" 。此表包含" id" 字段和"回复" 字段,用于指示回复所引用的评论。在下面的例子中,我有简单的注释1,4,7;评论2,3,6是对1的回复;评论5是对4的回复。

unordered comments

我的目标是在PHP中检索和显示注释,首先按注释ID排序,然后按其回复排序。这样:

ordered by id and replies

我想为每个评论创建一个MySql查询,以检索其回复;但我认为它效率不高,因为在这种情况下我必须多次查询数据库(如果评论没有回复,大多数都没有结果)。是否有高效的方式来实现此目标?也许创建一个独特的MySql查询,然后在PHP中详细说明结果?提前谢谢。

2 个答案:

答案 0 :(得分:3)

应该可以在SQL中这样订购(我假设回复的空白值为空)

SELECT id, comment, reply
FROM comments_table
ORDER BY IF(reply IS NOT NULL, reply, id), id

在sqlfiddle上测试: -

http://www.sqlfiddle.com/#!2/bf75b/1

答案 1 :(得分:0)

您可以使用mysqli_result::fetch_array将结果输出到数组。 然后创建一个注释数组  像:

//assuming $result has array of all comments sorted in assending order of number of comments.
//array(0=>array('id'=>1,'comment'=>'Nice article','reply'=>''), 1=>....
$comments=array();
foreach($result as $value){
if($value['reply']!='')
 $comments[$value['id']]=array('comment'=>$value['comment'],'reply' => array());
else
 $comments[$value['reply']]['reply'][$value['id']]=$value['comment']
}

这将创建一个包含一系列回复的注释数组。