Деревья в базах данных => Примеры скриптов => tree_al_ns
Конвертор из списков смежностей во вложенные множества
<?php
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 k_item from ".$s_table." where k_parent=".$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
i_left=".$i_value.",
i_right=".$i_right."
where
k_item=".$k_item."
")) return false;
$i_value=$i_right+1;
}
return $i_value;
}
?>