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;
}
 
?>

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

Ссылки
Реклама