我有一张名为Organizations
id | organization | parent_id
-----+---------------+-----------
51 | Organ1 | 0
71 | Organ2 | 0
83 | Organ2.1 | 71
89 | Organ1.1 | 51
104 | Organ1.1.1 | 89
...
拥有的组织parent_id = 0
是根组织。现在我明白我错了。parent_id
定义组织的父组织。
在我看来,这首先是一个绝妙的主意。因此,我会在一个表中创建无穷无尽的嵌套子组织。
现在我被困在如何确定一个组织的深度。
我目前的尝试如下:
<?php
$queryRootOrg = $db->prepare("SELECT * FROM Organizations WHERE parent_id = 0" );
$queryRootOrg ->execute();
$menu = "<ul id='menu'>";
if($queryRootOrg ->rowCount() > 0)
{
while($rowRoot = $queryRootOrg ->fetch(PDO::FETCH_ASSOC))
{
$menu .= "<li><a href='?org=".$rowRoot['id']."'>".$rowRoot['birim']."</a>";
$queryChildren= $db->prepare("SELECT * FROM Organizations WHERE parent_id = :p1");
$queryChildren->bindValue(":p1", $rowRoot['id'], PDO::PARAM_INT);
$queryChildren->execute();
if ($queryChildren->rowCount() > 0)
{
$menu .= "<ul>";
while($rowSub = $queryChildren->fetch(PDO::FETCH_ASSOC))
{
$menu .= "<li><a href='?org=" . $rowSub['id'] . "'>" . $rowSub['birim'] . "</a></li>";
}
$menu .= "</ul>";
}
$menu .= "</li>";
}
}
$menu .= "</ul>";
?>
这段代码只给我带来了两个层次。我想我在列表中看不到第三级组织。我的问题是,在这种情况下,我怎么知道一个组织的深度?还是有其他方法?