我构建了一个数据库,其中有一个名为"tasks"的表。表任务负责按任务的第一次进入日期的顺序保存任务。Tasks表有一个名为"parent"的列。此父列允许用户在另一个任务下创建新任务。例如,我们有一个任务,它的id是21。当我们在21任务下创建一个新的"子"任务时,我们将新任务的父列设置为21;说明新任务是21世纪任务下的任务。我附上了一张桌子的图片,这样就更容易理解发生了什么。https://i.stack.imgur.com/M9cmZ.jpg
我试图用所有这些任务来实现的是,我希望它们打印成树,如果可以的话,是一个无序的列表。列表的结构如下:
<ul id="tree">
<li><a href="#">A root Task</a>
<ul>
<li><a href="#">child of first task</a>
<ul>
<li><a href="#">grandchildren of first child</a></li>
<li><a href="#">grandchildren of first child</a></li>
</ul>
</li>
<li><a href="#">child of first task</a></li>
<li><a href="#">child of first task</a>
<ul>
<li><a href="#">grandchildren of first child</a></li>
<li><a href="#">grandchildren of first child</a></li>
<li><a href="#">grandchildren of first child</a></li>
</ul>
</li>
<li><a href="#">child of first task</a>
<ul>
<li><a href="#">grandchildren of first child</a></li>
</ul>
</li>
<li><a href="#">child of first task</a></li>
</ul>
</li>
</ul>
我想出了几个主意,但没有一个奏效。有什么想法吗?
上例中的根任务是任务表中其父值为0的任务。可能会有很多这样的无父任务,并且在另一个任务下创建任务是没有限制的。
也许你已经想到了。。但是
我想到的第一个想法是一个简单的函数,它返回与给定parent_id匹配的所有子项。。
因此,第一个调用是get_childs(0)
,他将使用parent_id='0'
返回所有Task。
每一个,都会再次调用相同的函数,上面有他的父母id。如果其中一个主任务具有id=50
,并且表中存在parent_id=50
,则它们将在其父任务下打印。
function get_childs($parent_id){
if ($result = $mysqli->query("SELECT * FROM table WHERE parent_id='".$parent_id."'")) {
echo '<ul>';
while ($row = $result->fetch_assoc()) {
echo '<li><a href="#">'.$row['name'].'</a>';
//call again for each child. if the id dosen't have childs, then prints nothing and go on!
get_childs($row['id']);
echo '</li>';
}// end while
echo '</ul>';
}// end if select
} // end function
希望它能有所帮助!