Задавался ли кто таким вопросом? Думаю ответы будут полезны не только мне.
на текущий момент догадался лишь до такого
private function _getCount($root=true){
$criteria = new CDbCriteria();
$criteria->addCondition('parent_id IS '.($root ? '' : ' NOT ').' NULL');
$criteria->addCondition('category_id IN (
SELECT
id
FROM
forum_categories
WHERE
_left >= :left
AND _right<= :right
AND _root= :root)'
);
$criteria->params[':left'] = $this->_left;
$criteria->params[':right'] = $this->_right;
$criteria->params[':root'] = $this->_root;
return YiiForumPost::model()->count($criteria);
}
public function getCountTopics(){
return $this->_getCount();
}
public function getCountPosts(){
return $this->_getCount(true);
}
в данном примере в yii используется геттер countTopics(), countPosts()
при вызове одного из них происходит выборка всех веток текущего корня. затем просто считаются все документы в этих ветках.
при показе всего дерева, данный гетер будет вызываться в каждой строке, а это кол-во запросов равно кол-ву веток. что не очень хорошо )
есть ли какие еще идеи?
пока писал додумал денормализацию провести и хранить счетчики в доп поле категорий.