[SQL]
ysql> show create table `faqCategories`\G
*************************** 1. row ***************************
Table: faqCategories
Create Table: CREATE TABLE `faqCategories` (
`id` int(10) unsigned NOT NULL auto_increment,
`parentId` int(10) unsigned default '0',
`urlPart` tinytext,
`url` tinytext,
`title` tinytext,
`description` longtext,
`position` int(11) default NULL,
`lang` tinytext,
PRIMARY KEY (`id`),
KEY `idx_urlPart` (`urlPart`(50)),
KEY `idx_url` (`url`(50)),
KEY `idx_parentId` (`parentId`),
KEY `idx_position` (`position`)
) ENGINE=MyISAM AUTO_INCREMENT=18 DEFAULT CHARSET=cp1251
1 row in set (0.00 sec)
[/SQL]
Есть PHP Код, как уменьшить количетсво интераций. Сейчас на дерево 3-х уровней из 11 обектов идет 72 итерации. Что-то многовато.
ysql> show create table `faqCategories`\G
*************************** 1. row ***************************
Table: faqCategories
Create Table: CREATE TABLE `faqCategories` (
`id` int(10) unsigned NOT NULL auto_increment,
`parentId` int(10) unsigned default '0',
`urlPart` tinytext,
`url` tinytext,
`title` tinytext,
`description` longtext,
`position` int(11) default NULL,
`lang` tinytext,
PRIMARY KEY (`id`),
KEY `idx_urlPart` (`urlPart`(50)),
KEY `idx_url` (`url`(50)),
KEY `idx_parentId` (`parentId`),
KEY `idx_position` (`position`)
) ENGINE=MyISAM AUTO_INCREMENT=18 DEFAULT CHARSET=cp1251
1 row in set (0.00 sec)
[/SQL]
PHP:
public function buildTree(&$objects) {
$this->_buildTree($objects, false, 0, 0);
var_dump(faqModel::$inerations);
//exit();
}
private function _buildTree(&$objects, $parent, $parentId, $level) {
foreach ($objects as $key => $object) {
faqModel::$inerations++;
if ($object->getParentId() == $parentId) {
$object->setLevel($level);
if ($parent) {
$parent->addChild($object);
unset($objects[$key]);
}
$this->_buildTree($objects, $object, $object->getId(), $level+1);
}
}
}