Welcome to php club

PHP FAQ from PHPclub.ru: Tree/DemoAlNs ...

Начало | Каталог | Изменения | НовыеКомментарии | Вам запрещён доступПользователи | Вам запрещён доступРегистрация | Вход:  Пароль:  

Деревья в базах данных => Примеры скриптов => 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;
}

?>


 
Комментариев нет. [Показать комментарии/форму]