我构建了一个包含名为“tasks”的表的数据库。表任务负责按照第一个输入日期的顺序保存任务。 Tasks表有一个名为“parent”的列。此父列允许用户在另一个任务下创建新任务。例如,我们有一个任务,它的id是21.当我们在第21个任务下创建一个新的“子”任务时,我们将新任务的父列设置为21;这意味着新任务是第21任务下的任务。我包含了一张桌子图像,以便更容易理解正在发生的事情。 http://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.可能有很多这些任务,无父任务,并且在另一个下创建任务没有限制。
答案 0 :(得分:1)
也许你已经想到了......但是......
我想到的第一个想法是一个简单的函数,它返回与给定parent_id匹配的所有子项。
因此,第一个电话是get_childs(0)
,他将使用parent_id='0'
返回所有任务。
每个人都会再次打电话给同一个人,他父母的身份就在上面。
如果其中一个主要任务有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
希望它有所帮助!