Tree/NsLoadLevel

Материал из PhpWiki.

Перейти к: навигация, поиск
 Деревья в базах данных =>  Вложенные множества =>  Загрузка дерева =>  Загрузка одного уровня
Как загрузить один уровень?

popoff

Представленный здесь скрипт возвращает массив, описанный здесь: Внутреннее представление деревьев в программах

<?php
 
// Эта функция возвращает части sql-запроса, которые Вы можете использвоать
//   при построении sql-запроса на выборку одного уровня из дерева
function tree_ns_load_level_sql($s_table)
{ // $s_table - имя таблицы, содержащей дерево
  // В качестве результата возвращает массив, в котором содержатся элементы:
  //  from - часть из раздела FROM sql-запроса
  //  level_child - номер дочернего уровня
  //  level_parent - номер родительского уровня
  //  parent - идентификатор родительского элемента
  //  child - идентификатор дочернего элемента
  //  order - порядок, в котором следует отсортировать выборку,
  //        что бы учитывать порядок, заданный структурой дерева
  //  where - часть из раздела WHERE sql-запроса
  return array(
    'from' =>
      $table." as mtl_1,
      ".$table." as mtl_2",
    'level_child' => 'mtl_2.i_level',
    'level_parent' => 'mtl_1.i_level',
    'parent' => 'mtl_1.k_item',
    'child' => 'mtl_2.k_item',
    'order' => 'mtl_2.i_left',
    'where' => "
      mtl_2.i_left between mtl_1.i_left+1 and mtl_1.i_right-1 and
      mtl_2.i_level=mtl_1.i_level+1
      "
    );
}
 
function tree_ns_load_level($k_parent)
{
  // Возвращает ложь в случае ошибки
  if(empty($k_parent)||!is_numeric($k_parent)) return false;
  $sql=tree_ns_load_level_sql('t_catalog_tree');
 
  $r=mysql_query("
    select
      t_catalog.k_item,   #идентификатор элемента
      t_catalog.s_name    #название
    from
      ".$sql['from'].",       #дерево
      t_catalog               #данные
    where
      ".$sql['where']." and
      ".$sql['parent']."=".$k_parent." and
      t_catalog.k_item=".$sql['child']."
    order by
      ".$sql['order']."");
  // Выборка может быть отсортировна по любому полю, в том числе и по полю s_name
 
  if(!$r) return false;
 
  $a_tree=array();
  for($i=0;$i<mysql_num_rows($r);$i++)
  {
    $f=mysql_fetch_assoc($r);
    $a_tree[]=array(
      'k_item' => $f['k_item'],
      's_name' => $f['s_name'],
      'a_tree' => array()
      );
  }
 
  return $a_tree;
}
 
?>

Смотрите так же: Другие способы загрузки дерева, представленного вложенными множествами Загрузка одного уровня для дерева, представленного списками смежности Вывод дерева

Личные инструменты