Древовидный вывод. Скрипт работает еле еле! Помогите!

general

Новичок
Древовидный вывод. Скрипт работает еле еле! Помогите!

Добрый день,

Требуется древовидный вывод категорий. Всего категорий(подкатегорий) 3000 штук. Нужно вывести на одну страницу. Нашел в интернете скрипт-функцию. Но она эти 3000 категорий выводит около минуты.

Ни в какой поисковик не запихнешь такую страницу! Помогите! Может быть можно как то оптимизировать.

В базе простая таблица

id parent_id name

Ниже привожу скрипт, который выводит это дерево (этот баобаб!).


PHP:
function ShowCategories($parent, $sSpace="")
{
 $dsSelect = mysql_query("SELECT id, parent_id, name FROM table1 WHERE parent_id=$parent");
 if(mysql_num_rows($dsSelect) >0 )
 {
   for($i = 0; $i < mysql_num_rows($dsSelect); $i++)
   {
   
   
      echo $sSpace.$sSpace.'<a href=?cat='.mysql_result($dsSelect, $i, "id").'>'.mysql_result($dsSelect, $i, "name"). '</a><br>';
      ShowCategories(mysql_result($dsSelect, $i, "id"), $sSpace.".");
   }
 }
};

ShowCategories();
Как я понимаю (начинающий программист), это функция в функции. Может быть тормоз именно в этом? Есть ли более быстрые скрипты? Или можно этот доработать?
 

Кром

Новичок
>это функция в функции

Это "рекурсия". Соответственно, с этим словом в поиск по форуму.
 

general

Новичок
Nested Sets, к сожалению, не подойдет. Т.к. данные в базе уже готовы и разработы в соответствии с id - parent_id.

Про рекурсию читал, но можно ли ее (данный скрипт) как-либо усовершенствовать.
 

Мутник

Новичок
general

да... сделать ОДИН запрос к базе данных, отсортировать массив в нужном тебе порядке (правда нужно еще одно поле `level` подсчитывать функцией) и потом просто показать.. ничего сложного + работать будет не более 1 секунды все это.. ну и вывод + пару ..

у меня когда то было древо на 12.000 записей - баловался... и все про все не более 10 секунд работало, так что смотри. НО обязателен один запрос. ;-)

а сейчас угадай сколько их у тебя ;)
 
Сверху