Popoff
не дави интеллектом
)))
Написал - поделись с общественностью!
забирай
) тока если что не так скажи - подправлю (мож че неграмотно или тп)
значит таблицы две: chapters(из которого берутся данные) и tree (новое дерево)
дело в том что id в tree буду различаться от id которое в chapters, т.к. в tree добавится корень дерева Главная, поэтому приходится брать уже новый id из tree и использовать его при вставке потомков.
Функция рекурсивно проходит от родителей к потомкам добавляя новых потомков используя функцию insert из класса CDBTree + CDatabase
значит таблицы две: chapters(из которого берутся данные) и tree (новое дерево)
дело в том что id в tree буду различаться от id которое в chapters, т.к. в tree добавится корень дерева Главная, поэтому приходится брать уже новый id из tree и использовать его при вставке потомков.
Функция рекурсивно проходит от родителей к потомкам добавляя новых потомков используя функцию insert из класса CDBTree + CDatabase
PHP:
//$gEng->ptrDBTree->clear(array("Name"=>"Главная")); //вставляем корень дерева (у меня он уже был вставлен id=1)
function recursiveTree(&$e,$id){
if ($id=='0'){
$result = $e->ptrDB->query("SELECT * FROM chapters WHERE ChapterPID is NULL ORDER BY SortOrder"); //в таблице chapters все родители были с ChapterID=NULL
} else {
$result = $e->ptrDB->query("SELECT * FROM chapters WHERE ChapterPID='$id' ORDER BY SortOrder");
}
if (mysql_num_rows($result)!==0) {
while ($row=$e->ptrDB->fetch_array($result)) {
if ($id=='0'){
$pid = '1';
} else {
$get_parentNodeInfo_result = $e->ptrDB->query("SELECT Name FROM chapters WHERE ChapterID='$id'"); //узнаем имя нового родителя из таблицы
$get_parentNodeInfo_array = mysql_fetch_array($get_parentNodeInfo_result);
$get_pid_result = $e->ptrDB->query("SELECT ChapterID FROM tree WHERE Name='".$get_parentNodeInfo_array['Name']."'");//узнаем id нового родителя в tree используя имя полученное из таблицы chapters
$get_pid_array = mysql_fetch_array($get_pid_result);
$pid = $get_pid_array['ChapterID'];
}
if ($e->ptrDBTree->insert($pid,array("ChapterPID"=>$pid,"Name"=>$row['Name']))) {
echo "Запись добавлена<br>";
} else {
echo "Ошибка: запись не добавлена<br>";
return false;
}
recursiveTree($e,$row['ChapterID']);
return true;
}
} else {
echo "Потомков нет.<br><br><br>";
}
}
recursiveTree($gEng,"0");
таблица chapter (из которой берутся данные)
CREATE TABLE `chapters` (
`ChapterID` int(6) unsigned NOT NULL auto_increment,
`ChapterPID` int(6) unsigned default NULL,
`Name` varchar(255) NOT NULL default '',
`Description` varchar(255) default NULL,
`SortOrder` tinyint(3) unsigned default NULL,
PRIMARY KEY (`ChapterID`),
UNIQUE KEY `ChapterID` (`ChapterID`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
таблица tree (где формируется новое дерево)
CREATE TABLE `tree` (
`ChapterID` int(6) unsigned NOT NULL auto_increment,
`ChapterPID` int(6) unsigned default NULL,
`Name` varchar(255) NOT NULL default '',
`Description` varchar(255) default NULL,
`SortOrder` tinyint(3) unsigned default NULL,
`cLeft` INT UNSIGNED NOT NULL,
`cRight` INT UNSIGNED NOT NULL,
`cLevel` INT UNSIGNED NOT NULL,
PRIMARY KEY (`ChapterID`),
UNIQUE KEY `ChapterID` (`ChapterID`),
KEY(cLeft, cRight, cLevel)
);
-~{}~ 06.10.05 08:57:
ChapterPID был сохранен для удобства
но совершенно необязателен