parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Получить таблицу идентификаторов вложенных категорий + производительность

kechinoff 11.01.2007 18:22

Здравствуйте. Хотелось бы услышать комментарий.
Я читал "Построение деревьев". Кое-что непонятно, кое-что в моем случае мне не требуется.

Итак, есть табличка
Category
с полями:
ID - идентификатор категории
ParentID - идентификатор родительской категории
Title - Название категории

Что нужно: нужно получить просто табличку парсера, в которой бы перечислялись ID категорий, являющихся для выбранной дочерними до самого конца, пока не закончатся. Ну и ее саму туда же.

Делаем так:
$list[^CreateCategoryTree[3]]


# Создает таблицу всех категорий, которые являются дочерними выбранной (ID) на неопределенную глубину
# Не спрашивайте, почему Tree - переделывалось уже несколько раз, раньше назначение другое было
@CreateCategoryTree[ID]
$result[^table::create{ID}]
^result.append{$ID}
^result.join[^Catalog:GetChildByParent[$ID]] # Вызывает метод, который добавляет в таблицу те категории, которые принадлежат выбранной (ID)


# Назначение описано строкой выше. Выбирает детские (дочерние) категории, прокручивает их, вызывает сам себя и добавляет результаты в табличку.
@GetChildByParent[ID]
$result[^Catalog:Categories[$ID]] # См. ниже
^result.menu{
	^result.join[^Catalog:GetChildByParent[$result.ID]]
}

# Выбирает категории, у которых ParentID = $ID (которые являются дочерними к выбранной. На один уровень)
@Categories[ID]
$result[^MySQL:Query[select ID from Category where ParentID = $ID]]
Сделал, вроде работает, но до конца осмыслить - почему работает, пока не получается.

Меня интересует нагрузка на сервер. Если категори 10-30 - то еще нормально. А если их 1500 и нужно получить список от категории второго уровня вложенности (или первого) - сервер будет жить? Или скрипт будет зарублен сервером за превышение лимита загрузки процессора или лимита времени исполнения?

А вообще цель всего этого - получить список товаров, которые находятся во всех вложенных категорих.
Т.е. сделать запрос
select from Catalog where Category in ( ^list.menu{$list.ID}[,] )
Спасибо за возможные ответы.