我正在尝试为我正在处理的工作创建一个基于“深度”的线程评论类型的东西。代码(如下)有效,但很难。麻烦,我也想去$ x深度,我做的方式将意味着“很多”循环,任何关于如何创建一个更简单/更好的方法的建议?
$sql = $azdb->get_row("SELECT * FROM ".$table_prefix."_content WHERE ID='".$_GET['ID']."'");
if($sql):
echo '<h2>'.$sql->content_title.'</h2>';
echo date('d m Y',strtotime($sql->content_modified));
echo '<br />';
echo $sql->content;
endif;
$sql = $azdb->get_results("SELECT * FROM ".$table_prefix."_content WHERE content_parent='".$_GET['ID']."'");
if($sql): foreach($sql as $sql):
echo '<div class="comments">';
echo '<h2>Main '.$sql->content_title.'</h2>';
echo date('d m Y',strtotime($sql->content_modified));
echo '<br />';
echo $sql->content;
echo '<br />';
$sql1 = $azdb->get_results("SELECT * FROM ".$table_prefix."_content WHERE content_parent='".$sql->ID."'");
if($sql1): foreach($sql1 as $sql1):
echo '<div class="comments">';
echo '<h2>'.$sql1->ID.' - '.$sql1->content_title.'</h2>';
echo date('d m Y',strtotime($sql1->content_modified));
echo '<br />';
echo $sql1->content;
$sql2 = $azdb->get_results("SELECT * FROM ".$table_prefix."_content WHERE content_parent='".$sql1->ID."' ");
if($sql2): foreach($sql2 as $sql2):
echo '<div class="comments">';
echo '<h2>'.$sql2->content_title.'</h2>';
echo date('d m Y',strtotime($sql2->content_modified));
echo '<br />';
echo $sql2->content;
echo '</div>';
endforeach; endif;
echo '</div>';
endforeach; endif;
echo '</div>';
endforeach; endif;
帮助表示赞赏。感谢
答案 0 :(得分:0)
使用像这样的递归函数
$id = isset($_GET['id']) ? $_GET['id'] : 0;
$root_sql = $azdb->get_results("SELECT * FROM categories WHERE cat_parent = " . $id);
recursive_categories($root_sql);
function recursive_categories($results)
{
if(count($results))
{
echo "<ul>";
foreach($results as $res)
{
echo "<li>" . $res->category;
//Rest of what ever you want to do with each row
//Check this category for children
$rows = $azdb->get_results("SELECT * FROM categories WHERE cat_parent = " . $res->id);
recursive_categories($rows);
//has to be after the inner loops
echo "</li>";
}
echo "</ul>";
}
}
因此,对于root的每次迭代,它会找到另一个属于id的父类的类,然后在该点运行相同的函数,从而创建另一个内部循环。
相应地修改,但你明白了。
答案 1 :(得分:0)
在这种情况下我要做的是首先回顾您如何将注释插入数据库。您定义的模式是整个模块中最重要的组成部分。
我在这里引用了类似的问题: Fast Relational method of storing tree data (for instance threaded comments on articles)
用户对如何存储此注释数据感到难过,而Drupal格式确实非常有效。通过这种方式查看,您可以创建一个干净的方法,这将消除您的多个x
SQL查询。
只需创建您的评论ID(字符串):
1 - main
1.1 - comment 1
1.2 - comment 2
1.2.1 - nested comment for comment 2
1.2.1.1 - nested comment for comment 2, nested comment 1
1.2.2
1.2.3
1.2.2.1
1.1.1 - (this comment you could order by your sql call to be 3rd from the top, etc)
这允许您进行一次SELECT * FORM
调用(获取所有x.%
等ID),然后正确地排序所有注释,并能够将ID用作条件检查窝或不。
我认为您需要首先重新考虑您的架构,然后处理PHP代码,它只是一堆<li>
条目。
@RobertPitt的答案是'ok'但它对你没有任何帮助,因为它只是将你的代码从顺序条件清理到正确的递归函数。