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

  • Автор темы Автор темы general
  • Дата начала Дата начала

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();

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

Это "рекурсия". Соответственно, с этим словом в поиск по форуму.
 
Nested Sets, к сожалению, не подойдет. Т.к. данные в базе уже готовы и разработы в соответствии с id - parent_id.

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

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

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

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