|
|
|
| У меня есть набор вложенных меню, которые хранятся в одной таблике таким образом:
id
ownerID
caption
...
ownerID - ссылка на id того раздела, к которому оно прнадлежит.
Вопрс в следующем. Я хочу вывести список всех разделов сайта вот таким образом:
Раздел1
Раздел1.1
Раздел1.1.1
Раздел1.1.2
Раздел1.1.n
Раздел1.2
Раздел1.n
Раздел2
Раздел2.1
Раздел2.1
и т.д.
будьте добры, поскажите, каким образом мне надо обойти всю таблицу? Как тут применить рекурсию? | |
|
|
|
|
|
|
|
для: Zilog
(18.02.2009 в 17:06)
| | Уже справился, спасибо. Рекурсия. | |
|
|
|
|
|
|
|
для: Zilog
(18.02.2009 в 17:31)
| | А вы не могли бы показать получившийся код? заранее благодарю | |
|
|
|
|
|
|
|
для: vgraff
(18.02.2009 в 20:15)
| | Мог бы конечно:
$this->GetList (0); <- выводит всё дерево
private functinon GetList($ownerID)
{
$sql = " SELECT * FROM vega_pages_data AS d, vega_pages AS p WHERE p.ownerID = '".$ownerID."' AND d.pageID = p.id ORDER BY p.sortIndex DESC";
$result = $CMS->Query($sql);
if (!$result) return;
while($data=mysql_fetch_object($result))
{
if ($data->strMenu!='')
{
$this->GetList($data->pageID);
echo $data->strCaption.'<br />';
}
}
}
|
Только у меня возникла проблема, которую я намерен сейчас обсосать в другой теме: результат приходит верный, но вложенность разделов в данном вариант получается с конца. Как нормально отсортировать - я пока не понял :) | |
|
|
|
|
|
|
|
для: Zilog
(18.02.2009 в 20:51)
| | Ну или тут может кто подскажет, у меня в запросе стоит:
ORDER BY p.sortIndex
в таком виде очередность разделов в результате нормальная только по первому уровню. Со второго и далее все разделы идут в обратном порядке. Почему?
Если добавить в конец DESC - то весь спискок верный, но отсортированный с конца. Что тоже не верно, ибо нужно в том порядке, который определяет поле sortIndex внутри каждого из разделов.
Есть мнения? | |
|
|
|
|
|
|
|
для: Zilog
(18.02.2009 в 21:00)
| | Ваш код, в принципе, не позволяет увидеть что во что вложено. Попробуйте посмотреть результат так:
<?php
# ...
private functinon GetList($ownerID)
{
static $nlvl = 0;
$nlvl++;
$sql = " SELECT * FROM vega_pages_data AS d, vega_pages AS p WHERE p.ownerID = '".$ownerID."' AND d.pageID = p.id ORDER BY p.sortIndex DESC";
$result = $CMS->Query($sql);
if (!$result) return;
while( $data = mysql_fetch_object($result) )
{
if ($data->strMenu!='')
{
echo str_repeat('---', $nlvl), ' ', $data->strCaption, '<br />';
$this->GetList($data->pageID);
}
}
$nlvl--;
}
# ...
?>
|
| |
|
|
|
|
|
|
|
для: BinLaden
(18.02.2009 в 22:07)
| | Спасибо, Неуловимый! Век живи - век учись. | |
|
|
|