Подкажите что-то типа самого быстрого рекурсивного перебора

maximus007

Новичок
Подкажите что-то типа самого быстрого рекурсивного перебора

Постараюсь объяснить что нужно сделать:
Представьте у вас есть 5 категорий, в каждой из низ может быть еще какое-то количество подкатоегорий, втех еще подкатегории, в тех еще подкатегория и так далее...

Какой скрипт выпонит это быстрее всего? На выходе должно получится что-то типа этого:
Категория 1
Категория 2
-- Подкатегория 1
-- Подкатегория 2
----Подкатегория 1
------Подкатегория 1
----Подкатегория 2
Категория 3
 

korchasa

LIMB infected
Редкоизменяемые данные, с легкоопределяемыми моментами изменения очень хорошо кэшировать ;)
 

Andre

Новичок
работаю с проектом, где при посещалке за 100 тыщ существует дерево категорий, ну примерно из 500 штук разной вложенности, до моего прихода была классическая рекурсия с выборками по парент_ид, то есть категория->запрос, тормозило жутко...
я сделал, вот что:
1. Выборка всех категорий одним запросом, обычный селект
2. Рекурсивная группировка и сортировка категорий, параллельно можно строить путь до текущей категории, раскрытое меню категорий и сформировать общий список категорий, например, для формы поиска + держать в памяти список категорий для вывода названия нужной категории в любом месте. Ключами такого массива (например, массива) я держу ид категории, то есть по сути доступ идет без доп.поиска
3. Разобранный и сгруппированный список категорий я сваливаю в кэш, например, с обновлением раз в 3 часа.

При таких изменениях выигрыш по времени составил более чем в 100 раз. Попробуйте, может, что получится.
 

AmdY

Пью пиво
Команда форума
минимально можнно добавить join-ов парочку к первому запросу и тащить всё одним запросом
 

Andre

Новичок
где 30, там и 300 может быть, алгоритм не должен быть заточен под количество, я же написал - выберите одним запросом и отсортируйте пхпой, а потом просто выведите где надо и как надо.
 

dimagolov

Новичок
nerezus, как сделаем govnocod.ru, так запостишь туда :)

засмущали парня, блин :)
 

dimagolov

Новичок
еще нет. но поискав в гугле ради прикола я так и не нашел где-либо определения что такое говнокод. только использование термина на форумах. Предлагаю начать с того, что написать статью в википедию, как ни как аспект программирования.
 

maximus007

Новичок
Вот))):
PHP:
function showCat($id = 0)
    {
     global $prefix, $db, $conf;
     $content .= "fgf";
     $result = $db->sql_query("SELECT * FROM ".$prefix."_categories WHERE parentid=".intval($id));
     while(list($id, $modul, $title, $description, $img, $language, $parentid) = $db->sql_fetchrow($result))
     {
         $content .= $title;
         showCat($id);
     }
     return $content;
    }
 
Сверху