|
|
|
|
|
для: Trianon
(06.01.2011 в 11:53)
| | добавка:
$all = mysql_query("...");
while($as = mysql_fetch_array($all))
{
$id=$as[id];
$sub=$as[sub];
$mass_sub[$id]=$sub;// формируем массив из исходных данных
}
|
| |
|
|
|
|
|
|
|
для: BMW
(06.01.2011 в 11:01)
| | я не понял, как у Вас из одной строки $mass_sub[$id]=$sub; образовался массив.
UPD. Похоже, въехал.
Если первая строка выполнялась в цикле, так это наверное как-то показать можно было?
Стобственно, что я думаю, я уже ж написал.
Если у Вас есть путь из ключей, упорядоченный по подчиненности, то искомым элементом будет хвост этого пути. Без сложных действий по копированию массива и удалению лишнего.
В то, что получить набор ключей в беспорядке проще, чем упорядоченным, я не верю (при схеме хранения дерева adjacency_lists, которую Вы применяете).
Упорядоченным этот путь получается и при пробеге от последнего потомка к корню, и при пробеге (рекурсивном, очевидно) от корня к потомку. | |
|
|
|
|
|
|
|
для: Trianon
(06.01.2011 в 10:06)
| | Будучи не сильно осведомленым в сложных mysql запросах, решил добить идею с массивами в результате:
$mass_sub[$id]=$sub;// формируем массив из исходных данных
$mass_del=$mass_sub;//дабл массив
foreach($mass_sub as $vv_id => $vv_s)
$mass_del[$vv_s]='';//удаляем те значения чьи ID содержаться в SUB
//print_r($mass_del);
foreach($mass_del as $voo=>$ii)
if($ii!='')echo $voo;// самый подчиненный из перечисленного
|
правда, тут есть правило, нужно обязательно все элементы подчиненности были, без пропусков, но думаю в след модификации устраню, и наверное изменю логику, по-моему более эффективно сторить ветку в иерархии найдя раздел родительский у которго значение 0, а потом начиная с конечного значения проверять те что есть на соответсвие, как только подходят значит это и есть самый подчиненный из перечисленного множества, тут и пропуски в древе будут по барабану. Что Вы думаете об этом? | |
|
|
|
|
|
|
|
для: BMW
(06.01.2011 в 10:00)
| | Где стеб?
Решили? Респект.
Где код решения? | |
|
|
|
|
|
|
|
для: Trianon
(05.01.2011 в 16:56)
| | Спасибо за стеб) Решил задачу) | |
|
|
|
|
|
|
|
для: BMW
(05.01.2011 в 16:52)
| | да что ж такое то...
http://lmgtfy.com/?q=nested%20sets | |
|
|
|
|
|
|
|
для: Trianon
(05.01.2011 в 16:04)
| | Расскажите об этой схеме, у меня есть еще возможность изменить) | |
|
|
|
|
|
|
|
для: BMW
(05.01.2011 в 15:25)
| | >То есть в третьем столбце храним ид того кого подчиняем?
Нет. Там все значительно сложнее. Но У Вас же все равно схема id - parent_id. | |
|
|
|
|
|
|
|
для: Trianon
(05.01.2011 в 14:30)
| | >Это задача о нахождении кроны дерева. (Крона, вообще-то не один элемент, а множество. )
>И решается соответствующим запросом к БД.
>
>
>UPD.
>Между прочим. Если У Вам на уровне приложения эти ключи уже выбраны, и если они представляют из себя путь от корня к элементу кроны, наиболее естественным было бы передавать их упорядоченной последовательностью, а не набором внавал. И тогда элементу кроны соответствовал бы последний элемент массива.
>
Они изначально не упорядочены, просто набор, а чтобы упорядочить, как я понимаю нужно знать иерархию (опять к тому же)
>UPD2.
>При хранении дерева по методике nested sets (вместо применяемой у Вас adjacency lists) признаком корневого элемента является явное условие n.lb+1==n.rb
>
То есть в третьем столбце храним ид того кого подчиняем? | |
|
|
|
|
|
|
|
для: BMW
(05.01.2011 в 14:15)
| | Это задача о нахождении кроны дерева. (Крона, вообще-то не один элемент, а множество. )
И решается соответствующим запросом к БД.
UPD.
Между прочим. Если У Вам на уровне приложения эти ключи уже выбраны, и если они представляют из себя путь от корня к элементу кроны, наиболее естественным было бы передавать их упорядоченной последовательностью, а не набором внавал. И тогда элементу кроны соответствовал бы последний элемент массива.
UPD2.
При хранении дерева по методике nested sets (вместо применяемой у Вас adjacency lists) признаком корневого элемента является явное условие n.lb+1==n.rb | |
|
|
|
|