という名前のテーブルがあります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
組織の親組織を定義します。
最初は素晴らしいアイデアに見えました。したがって、1 つのテーブルに無限にネストされた子組織を作成したことになります。
今、組織の深さを判断する方法に行き詰まっています。
私の現在の試みは今のところ次のようなものです:
<?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>";
?>
このコードでは、2 つのレベルしか得られません。リストに第 3 レベルの組織が表示されていないと思います。私の質問は、この状況で組織の深さをどのように知っているのでしょうか? それとも別のアプローチがありますか?