PHP « апгрейд обычного дерева до Nested sets
В общем есть стандартная таблица с id, patent_id, level, etc. Нужно превратить её в полноценную Nested sets, для этого не хватает left_key и rigth_key. Поможите написать скриптец, чтобы обошёл все поля и выставил эти ключи. Можно просто алгоритм описать.
1 ответов
function tree_al_ns($s_table,$i_value=0,$k_parent=0)
//обновляет вложенные множества в соответствие со списками смежности
//$s_table содержит в себе имя таблицы с деревом.
// В этой таблице дерево хранится комбинированным способом:
// списки смежности и вложенные множества
//$i_value - идентификатор первого свободного значения (левого или правого)
//$k_parent - идентификатор текущей родительской вершины.
// 0 - для корневой вершины
//возвращает следующее свободное значение или
// false в случае ошибки
//пример вызова:
// if(tree_al_ns('t_catalog_tree')===false)
// echo 'Конвертирование прошло с ошибками.';
{
if(!is_numeric($k_parent)||!is_numeric($i_value)) return false;
$r=mysql_query("select cat_id from ".$s_table." where parent_id=".$k_parent);
if(!$r) return false;
for($i=0;$i<mysql_num_rows($r);$i++)
{
$f=mysql_fetch_row($r);
$k_item=$f[0];
$i_right=tree_al_ns($s_table,$i_value+1,$k_item);
if($i_right===false) return false;
if(!mysql_query("
update
".$s_table."
set
left_key=".$i_value.",
right_key=".$i_right."
where
cat_id=".$k_item."
")) return false;
$i_value=$i_right+1;
}
return $i_value;
}
tree_al_ns($table);
мопед не мой