Привет, я хочу создать treview на n-м уровне. У меня есть этот запрос
<ul style="list-style:none;" id="MainMenu">
<?php
$selectfolders=mysql_query("select * from tbl_folders where user_id=1");
while($foldername=mysql_fetch_array($selectfolders))
{?>
<li style="padding:5px;" >
<?php echo $foldername['title'];?>
<?php
$selecttasks=mysql_query("select * from tbl_tasks where project_id=$foldername[f_id] and parent_id=0");
$numtask=mysql_num_rows($selecttasks);
if($numtask>=1)
{
?>
<ul id="TaskList">
<?php
while($tasks=mysql_fetch_array($selecttasks)){
if($tasks['parent_id']==0)
{?>
<li><?php echo $tasks['title'];?></li>
<?php }
else
{
?>
<li><?php echo $tasks['title'];?>
////////////////////Here will be again new query for subtask and for next step again need to more queries///////////
<?php $selectsubtasks=mysql_query("select * from tbl_tasks where parent_id=$tasks[t_id]");?>
<ul id="SubTaskList">
<?php while($subtask=mysql_fetch_array($selectsubtasks))
{?>
<li><?php echo $subtask['title'];?></li>
<?php }?>
</ul>
</li>
<?php }
}?>
</ul>
<?php }?>
</li>
<?php }?>
</ul>
Этот пробег до двух уровней. но таким образом мне нужно все больше SQL-запросов. Поэтому, пожалуйста, помогите мне, как я могу создать treview на n-м уровне в простых одном или двух SQL-запросах. Будет любая простая функция, если вы можете создать, пожалуйста, помогите с благодарностью.
Во-первых, функции "mysql_ *" довольно устарели. Вместо этого используйте PDO.
Затем подумайте об использовании возвращающих функций, чтобы выполнить результат запроса. Я считаю, что array_walk_recursive должен здесь помочь.
Запрос всех ваших данных из базы данных в одном массиве с родительской информацией (массив должен выглядеть примерно так: array( $element_id => array( 'parent' => $parent_id, $element))
), а затем создайте дерево массивов, используя Информация.
Чтобы преобразовать ваш древовидный массив в список, просто используйте array_walk_recursive
с пользовательским обратным вызовом.
Если я правильно помню, есть нативные функции, которые могут управлять этим делом, но на данный момент я не могу взять его в руки. Я вернусь, как только найду.