我想让只有一个层次的深度评论系统在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评论系统)
任何建议吗? ?
如果没有特殊的键,你不能对所有的数据进行排序。
最简单的方法是选择所有注释和线程:
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*/)
)
)
<?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) {
}
}
假设您只在注释表中记录注释…
要获取一个线程的所有注释,使用如下sql查询:
select * from comments where thread_id = 'yourthread_id'
我假设q &A作为父母。
你必须写注释和它们的线程和父id的到表中,记录它们属于哪里。
记录时不要让它们为空。
:
$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将每个注释收集到相应的父注释中,并通过时间戳发现它们的条目顺序…这就是数组操作,我想你们很容易做到