我有这样的表结构:
id_comment
body
date_created
date_updated
user_id
parent_id
现在这个函数:
public function comments_list($comments)
{
$comments_list = "";
foreach ($comments as $c) :
if($c['parent_id'] == 0) :
$comments_list .= '<div class="comment level-0">';
$comments_list .= $c['body'];
$comments_list .= '</div>';
endif;
endforeach;
}
$comments 是包含所有评论的数组(二维数组)。 $c['parent_id'] == 0 是父评论。子评论的 parent_id 设置为父评论的 ID。 如何创建具有父/子关系的评论列表?
评论结构:
array(5) {
[0]=>
array(9) {
["id_comment"]=>
string(1) "1"
["body"]=>
string(532) "Odio lectus hac odio ultrices vel diam hac elementum amet et scelerisque porttitor nunc elementum. Sit nunc turpis! Porttitor, odio massa nisi turpis porttitor aliquam aliquam proin! Tincidunt dapibus adipiscing sagittis adipiscing odio velit eros nisi tortor porttitor ut elit enim amet egestas porta. Massa. Nec tortor aliquet sed ultrices dignissim massa! Adipiscing tortor, pulvinar ultricies, lectus adipiscing sagittis, a tortor sit magna integer. Scelerisque hac amet amet habitasse et turpis integer nisi sagittis ridiculus."
["date_created"]=>
string(19) "2014-07-01 00:00:00"
["date_updated"]=>
string(19) "2014-07-02 02:34:51"
["post_id"]=>
string(1) "4"
["user_id"]=>
string(1) "1"
["parent_id"]=>
string(1) "0"
["good_vote"]=>
string(1) "0"
["bad_vote"]=>
string(1) "0"
}
[1]=>
array(9) {
["id_comment"]=>
string(1) "2"
["body"]=>
string(532) "Odio lectus hac odio ultrices vel diam hac elementum amet et scelerisque porttitor nunc elementum. Sit nunc turpis! Porttitor, odio massa nisi turpis porttitor aliquam aliquam proin! Tincidunt dapibus adipiscing sagittis adipiscing odio velit eros nisi tortor porttitor ut elit enim amet egestas porta. Massa. Nec tortor aliquet sed ultrices dignissim massa! Adipiscing tortor, pulvinar ultricies, lectus adipiscing sagittis, a tortor sit magna integer. Scelerisque hac amet amet habitasse et turpis integer nisi sagittis ridiculus."
["date_created"]=>
string(19) "0000-00-00 00:00:00"
["date_updated"]=>
string(19) "2014-07-02 02:34:54"
["post_id"]=>
string(1) "4"
["user_id"]=>
string(1) "1"
["parent_id"]=>
string(1) "2"
["good_vote"]=>
string(1) "0"
["bad_vote"]=>
string(1) "0"
}
[2]=>
array(9) {
["id_comment"]=>
string(1) "3"
["body"]=>
string(532) "Odio lectus hac odio ultrices vel diam hac elementum amet et scelerisque porttitor nunc elementum. Sit nunc turpis! Porttitor, odio massa nisi turpis porttitor aliquam aliquam proin! Tincidunt dapibus adipiscing sagittis adipiscing odio velit eros nisi tortor porttitor ut elit enim amet egestas porta. Massa. Nec tortor aliquet sed ultrices dignissim massa! Adipiscing tortor, pulvinar ultricies, lectus adipiscing sagittis, a tortor sit magna integer. Scelerisque hac amet amet habitasse et turpis integer nisi sagittis ridiculus."
["date_created"]=>
string(19) "0000-00-00 00:00:00"
["date_updated"]=>
string(19) "2014-07-02 02:34:56"
["post_id"]=>
string(1) "4"
["user_id"]=>
string(1) "1"
["parent_id"]=>
string(1) "3"
["good_vote"]=>
string(1) "0"
["bad_vote"]=>
string(1) "0"
}
[3]=>
array(9) {
["id_comment"]=>
string(1) "4"
["body"]=>
string(532) "Odio lectus hac odio ultrices vel diam hac elementum amet et scelerisque porttitor nunc elementum. Sit nunc turpis! Porttitor, odio massa nisi turpis porttitor aliquam aliquam proin! Tincidunt dapibus adipiscing sagittis adipiscing odio velit eros nisi tortor porttitor ut elit enim amet egestas porta. Massa. Nec tortor aliquet sed ultrices dignissim massa! Adipiscing tortor, pulvinar ultricies, lectus adipiscing sagittis, a tortor sit magna integer. Scelerisque hac amet amet habitasse et turpis integer nisi sagittis ridiculus."
["date_created"]=>
string(19) "0000-00-00 00:00:00"
["date_updated"]=>
string(19) "2014-07-02 02:34:59"
["post_id"]=>
string(1) "4"
["user_id"]=>
string(1) "0"
["parent_id"]=>
string(1) "1"
["good_vote"]=>
string(1) "1"
["bad_vote"]=>
string(1) "0"
}
[4]=>
array(9) {
["id_comment"]=>
string(1) "5"
["body"]=>
string(532) "Odio lectus hac odio ultrices vel diam hac elementum amet et scelerisque porttitor nunc elementum. Sit nunc turpis! Porttitor, odio massa nisi turpis porttitor aliquam aliquam proin! Tincidunt dapibus adipiscing sagittis adipiscing odio velit eros nisi tortor porttitor ut elit enim amet egestas porta. Massa. Nec tortor aliquet sed ultrices dignissim massa! Adipiscing tortor, pulvinar ultricies, lectus adipiscing sagittis, a tortor sit magna integer. Scelerisque hac amet amet habitasse et turpis integer nisi sagittis ridiculus."
["date_created"]=>
string(19) "0000-00-00 00:00:00"
["date_updated"]=>
string(19) "2014-07-02 02:35:02"
["post_id"]=>
string(1) "4"
["user_id"]=>
string(1) "1"
["parent_id"]=>
string(1) "0"
["good_vote"]=>
string(1) "0"
["bad_vote"]=>
string(1) "0"
}
}
最佳答案
您需要的基本查询是这样的:
SELECT * FROM `comments` WHERE `parent_id` = 0 ORDER BY `date_created` DESC
假设您要查找的评论的父级 ID 为 0
。
首先,只获取“root”注释:
SELECT * FROM `comments` WHERE `parent_id` IS NULL ORDER BY `date_created` DESC
假设“根”评论的父 ID 为空值(您需要一些东西来将其与子评论区分开来)。
编辑
好的,我想我明白你的问题是什么;)如果没有,请澄清!
您应该采取 2 个步骤:1)获取根注释并迭代它们,同时将它们插入到 DOM 中。 2)在每次迭代时,获取“子注释”并迭代它们,将它们插入到 DOM 中
如果你想要多级注释,你应该使用递归。
示例:
$query = 'SELECT * FROM `comments` WHERE `parent_id` IS NULL ORDER BY `date_created` DESC';
$comments = fetch_results_with_your_own_database_function($query);
foreach($comments as $comment) {
echo '<div class="comment">';
echo $comment->body;
echo subCommentList($comment->id);
echo '</div>';
}
function subCommentList($parent_id) {
$query = 'SELECT * FROM `comments` WHERE `parent_id` = '. $parent_id .' ORDER BY `date_created` DESC';
$comments = fetch_results_with_your_own_database_function($query);
foreach($comments as $comment) {
echo '<div class="subcomment">';
echo $comment->body;
echo subCommentList($comment->id);
echo '</div>';
}
}
请注意,该函数正在使用当前 id 作为下一次调用的父级来调用自身。每次它都会在您的列堆栈中更深入(请原谅我对术语的错误使用)。
警告在查询中按原样包含 ID 是非常不安全的。我相信你使用了一个好的数据库和准备好的语句等。如果你还没有使用它,请谷歌
关于PHP - 与父级一起创建评论列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24515105/