parser

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

 

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

Плохо это... Много запросов...

Misha v.3 16.05.2002 10:45

Смотри на такой пример (но не как на неотложную истину, там тоже можно много пооптимизировать)

0. храним thread_id - это избыточная информация, для записи с parent_id = 0 thread_id = id, для всех остальных записей в этом треде thread_id равен thread_id корневого элемента.

1. достаем корневые объекты - один запрос.

2. достаем все объекты с теми thread_id, которые у достатых парентов - еще один запрос (where thread_id IN (^parentList.menu{$parentList.id}[,])

3. далее делаем что-нить типа этого:
# метод рисует элемент дерева
@printTreeItem[item;body]
$item.name
$body


# метод рекурсивно обходит все дерево
@printMessagesByParent[parentId;threadId][localMessages]
$localMessages[^allMessages.select($allMessages.parent_id==$parentId)]
^localMessages.menu{
	^printTreeItem[$localMessages.fields;^printMessagesByParent[$localMessages.id;$threadId]]
}


# собственно зовем так:
@main[]
$allMessages[тут достали то, из чего строим дерево, см. предыдущие пункты]
^printMessagesByParent[0]
Надеюсь, что я ничего не напутал, но думаю, что идея ясна.

Да, чуть не забыл, я про это написал уже статейку, скоро выложу :)))

И... процесс совершенствования безграничен, это далеко не единственный метод и в некоторых случаях не оптимальный.