1

我建立了一个数据库,其中有一个名为“tasks”的表。表任务负责按照第一次进入日期的顺序保存任务。任务表有一个名为“父”的列。此父列使用户能够在另一个任务下创建新任务。例如我们有一个任务,它的 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>

我想出了几个想法,但都没有奏效。有什么想法吗?

上例中的根任务是tasks表中其父值为0的任务。可能有很多,无父任务,在另一个下创建任务没有限制。

4

1 回答 1

2

也许你已经想到了……但是……

我想到的第一个想法是一个简单的函数,它返回与给定 parent_id 匹配的所有孩子。

所以,第一个电话是get_childs(0),他将返回所有的任务parent_id='0'

每个人都会再次调用相同的函数,上面有他的父母 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

希望能帮助到你!

于 2013-08-01T09:06:52.297 回答