我想在php中只创建一个级别的深度注释系统,就像stackoverflow注释系统一样。
我创建了一个包含以下字段的评论表
comment_id int(11) (PRIMARY KEY)
parent_id int(11)
thread_id int(11) (FOREIGN KEY)
title varchar(400)
body varchar(400)
date_comment timestamp
user_name varchar(100)
我正在使用此查询检索父评论
SELECT * FROM comments WHERE thread_id = {$thread_id}
AND parent_id IS NULL
但是我还需要检索所有的孩子评论,顺序是先来父评论,然后是所有孩子评论等等。(就像Stackoverflow评论系统一样)
任何建议??
答案 0 :(得分:2)
如果没有任何特殊密钥,您无法订购所有数据。
最简单的方法是选择所有注释和主题:
SELECT
*
FROM
comments
WHERE
thread_id = {$thread_id}
并使用结果数组进行简单操作:
$array = array();
foreach($result as $row)
{
if(!$row['thread_id']){
$array[$row['id']]=array();
$array[$row['id']]['DATA'] = $row;
continue;
}
$array[$row['id']][$row['id']] = $row;
}
您将拥有如下数组:
Array(
/*thread==>*/ [11] => Array(
/*thread data==>*/ [DATA] => Array(/*with thread data*/)
/*comment==>*/ [12] => Array(/*with data*/)
/*comment==>*/ [13] => Array(/*with data*/)
)
)
答案 1 :(得分:0)
假设您只在评论表中记录评论...
要获取线程的所有注释,请使用类似的SQL查询:
select * from comments where thread_id = 'yourthread_id'
我假设q& a作为父母。
您必须将主题和
录制时不要将它们留空。
所以:
$query = "select * from comments where thread_id = '$threadId'";
$result = mysqli_query($query);
if(!$result){
echo('Failure : '.mysqli_errno());
exit(0);
}
$comments = [];
while(true){
$row = mysqli_fetch_assoc($result);
if(!$row)break;
$comments[] = $row;
}
现在你有$ comments数组填充了属于该线程的注释。
每个元素都具有数据库记录的结构:
$comment[0]['comment_id'] etc...
现在通过遍历该数组,您可以通过其parent_id将每个注释收集到其相应的父级中,并通过时间戳发现它们的输入顺序......这就是数组操作,我想您可以轻松完成。
答案 2 :(得分:0)
<?php
$a = mysql_query("Select * From comments where thread_id = {$thread_id} AND parent_id IS NULL");
while($row= mysql_fetch_array($a)) {
$b = mysql_query("Select * From comments, where thread_id = ($thread_id} AND parent_id = " . $row['comment_id'] .";");
while($row2 = mysql_fetch_array($b) {
}
}