Как определить глубину уровня узла дерева ? | |
---|---|
Myhailo Автор Сообщений: 750 Дата регистрации: 07.02.2006 |
Здраствуйте
Есть таблица (счетчиков) поле id - pk счетчика, iparent - id счетчмка родителя. Если заполнено iparent значит id - субсчетчик. Для расчета показаний нужно определить порялок расчета, столбец ilevel т.е. рассчитать показания счетчиков в порядке убивания ilevel. Подскажите пожалуйста как из приведенного примера получить столбец ilevel Спасибо.
|
Re: Как определить глубину уровня узла дерева ? | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
Как-то я делал - всего через один хитрый запрос формировал на основе справочника с перечнем.
Который потом и сканировал в дереве. Но думаю его пришлось бы сильно адаптировать, чтобы применить к этому случаю. Поскольку для простоты формирования всех подобных вещей - на мой взгляд, лучше все идентификаторы делать не численного типа (N), а сразу символьного (С), чтобы меньше всяких преобразований было при формировании дерева. При этом удобнее скажем для дерева с 4 уровнями вложенности изначально иметь в поле таблицы строку-идентификатор такого вида: "01010000" или "01020000" - для двух объектов "01" и "02" (3-4 позиция в этом поле), чей родитель "01" (1-2 позиция). понятно, что это, если они сами могут быть родителями еще двух уровней. При этом корень у дерева такой глубины вложенности имеет идентификатор "00000000". Для дерева же со всего 2 уровнями естественно будет "0000". И у этих двух объектов в поле значения: "0101" и "0102". Обычно конечно делают чуть иначе, ставя каждому объекту числовой идентификатор в поле, как показано у тебя, но использование для идентификатора именно символьной строки, на мой взгляд, затем многое упрощает при всяких операциях работы с узлами и прочим. ------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) Исправлено 1 раз(а). Последнее : Crispy, 04.09.20 15:22 |
Re: Как определить глубину уровня узла дерева ? | |
---|---|
of63 Сообщений: 25244 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
> Подскажите пожалуйста как из приведенного примера получить столбец ilevel
Т.е. в примере не заполняем INSERT-ами поле iLevel. Задача расчитать глубину вложения и заполнить это поле? > INSERT INTO test (id , iparent , ilevel) VALUES (13, 0, 0) INSERT INTO test (id , iparent , ilevel) VALUES (15,13,1) INSERT INTO test (id , iparent , ilevel) VALUES (25,15,3) && почему iLevel=3 а не 2 ? INSERT INTO test (id , iparent , ilevel) VALUES (26,15,2) && почему iLevel отличается от предыдущей строки, ведь родитель такой же (15)? |
Re: Как определить глубину уровня узла дерева ? | |
---|---|
akvvohinc Сообщений: 4219 Откуда: Москва Дата регистрации: 11.11.2008 |
Если не мудрить, то для каждой записи делать что-нибудь типа
а в цикле просто добавлять 1 к счетчику уровней - на выходе и будет номер уровня текущей записи. А у дерева с N уровнями? И почему именно 2 символа на уровень? |
Re: Как определить глубину уровня узла дерева ? | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
Просто эмпирически. Обычно в моем случае принципиально не бывало больше 99 дочерних элементов. Для каких-то гигантских случаев, возможно этот вариант был бы не слишком хорошим. Хотя мне кажется дерево, где даже 1000 дочерних элементов - нечто, что если не до конца повесится, то будет страшно тормозить. В любом случае конечно - каждый решает для себя, у каждого свои нюансы, имеет смысл лишь ориентироваться на чужие решения. ------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) |
Re: Как определить глубину уровня узла дерева ? | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
------------------ WBR, Igor |
Re: Как определить глубину уровня узла дерева ? | |
---|---|
Myhailo Автор Сообщений: 750 Дата регистрации: 07.02.2006 |
Всем спасибо, то что нужно, и конечно особенная благодарнось Igor Korolyov
|
© 2000-2024 Fox Club  |