|
|
|
|
|
для: Gust
(20.09.2007 в 12:48)
| | Вариант первый.
Для случая, когда вложенность большая, но конечная
SELECT t1.id, t2.id, t3.id, t4.id ...
FROM table t1
LEFT JOIN table t2 ON t1.parent_id=t2.id
LEFT JOIN table t3 ON t2.parent_id=t3.id
LEFT JOIN table t4 ON t3.parent_id=t4.id
...
WHERE t1.id=искомый id
|
Для реальных задач уровня вложенности 10 хватает за глаза, но для маньяков - mysql поддерживает, если не путаю, до 128 уровня.
Вариант второй.
Если нам нужна реально бесконечная вложенность.
<?
$id=10; //искомый id
$tmp=$id;
$parents=array();
while ($tmp)
{
$parents[]=$tmp;
$result=mysql_query("SELECT parent_id FROM table WHERE id=$tmp");
$tmp=mysql_result($result, 0);
}
print_r($parents);
|
Все. Никакой рекурсии. | |
|
|
|
|
|
|
|
для: Loki
(20.09.2007 в 11:58)
| | >обычным циклом. ...
да, пожалуй, предполагаю логика была бы запросить все записи с обратной сортировкой по родителю и перебрать их в цикле до 0-родителя.
>...или вам еще код написать?
только если я не правильно предположил (можно только логику) | |
|
|
|
|
|
|
|
для: Gust
(20.09.2007 в 11:02)
| | обычным циклом. или вам еще код написать? | |
|
|
|
|
|
|
|
для: Loki
(20.09.2007 в 09:39)
| | >это значит что при такой структуре у любого элемента всего один родитель. Рекурсия используется в том случае, когда количество связанных элементов неизвестно.
Что 1 родитель это понятно, а как вы предлагаете найти нулевого родителя у выбранного ID (скажем в 5 вложении), чтобы знать какой пункт основного меню нужно раскрыть, а какие оставить свернутыми? | |
|
|
|
|
|
|
|
для: Gust
(20.09.2007 в 07:15)
| | >не значит ли это что у родителя тоже может быть родитель?
это значит что при такой структуре у любого элемента всего один родитель. Рекурсия используется в том случае, когда количество связанных элементов неизвестно. | |
|
|
|
|
|
|
|
для: Loki
(19.09.2007 в 16:35)
| | >1. не нужна тут рекурсия - больше одного родителя ни у кого нет, ...
как уточнил автор
>... Глубина не ограничена! ...
не значит ли это что у родителя тоже может быть родитель?
>...а потомков запрашиваем всего на один уровень вглубь.
под прямыми потомками я именно это и имел | |
|
|
|
|
|
|
|
для: Gust
(19.09.2007 в 15:35)
| | 1. не нужна тут рекурсия - больше одного родителя ни у кого нет, а потомков запрашиваем всего на один уровень вглубь. | |
|
|
|
|
|
|
|
для: boom.olezka
(19.09.2007 в 12:59)
| | Всем спасибо, посмотрел скрипты от shop-script то что надо :) Но буду ещё пробывать :) | |
|
|
|
|
|
|
|
для: boom.olezka
(19.09.2007 в 14:12)
| | а 3 когда появится?
Решение, наверно, будет сводится к следующему:
1. Рекурсией идешь от выбранного ID до корневого родителя, находя его ID и собирая открытую ветку;
2. Запрашиваешь корневые записи без найденого ID родителя ветки для основного меню
3. Запрашиваешь всех прямых потомков выбранного ID для формирования ветки вложения.
4. Все это сшиваешь в дерево. | |
|
|
|
|
|
|
|
для: boom.olezka
(19.09.2007 в 14:12)
| | Напиши функцию.......которая выбирает по паренту........смотри.....передается ай ди категории.......это парент для подкатегорий.........т.е. не всю выборку делай.......а по ай ди............ | |
|
|
|
|