У меня есть таблица с именем, как 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>";
?>
Этот код приносит мне только два уровня. Я думаю, что я не могу видеть организацию третьего уровня в списке. Вопрос: почему я знаю глубину организации в этом обстоятельстве? Или есть другой подход?
Возможный дубликат [MySQL - Adjacency List Model - Get Depth] (http://stackoverflow.com/questions/10999888/mysql-adjacency-list-model-get-depth) –
Рассматривали ли вы переход на вложенный набор модель? – Strawberry
Так что в принципе .. если бы у вас была «глубина», ваши проблемы исчезли .. что-то подразумевает :) –