Tree/NsLoadPath
Материал из PhpWiki.
Деревья в базах данных => Вложенные множества => Загрузка дерева => Загрузка пути
Как загрузить путь к заданной вершине?
popoff
Представленный здесь скрипт возвращает массив, описанный здесь: Внутреннее представление деревьев в программах
<?php // Эта функция возвращает части sql-запроса, которые Вы можете использовать // при построении sql-запроса на выборку пути к вершине function tree_ns_load_path_sql($s_table) { // $s_table - имя таблицы, содержащей дерево // В качестве результата возвращает массив, в котором содержатся элементы: // from - часть из раздела FROM sql-запроса // level_child - номер дочернего уровня // level - номер родительского уровня // parent - идентификатор родительского элемента // child - идентификатор дочернего элемента // where - часть из раздела WHERE sql-запроса return array( 'from' => $table." as mtp_1, ".$table." as mtp_2", 'child' => 'mtp_1.k_item', 'parent' => 'mtp_2.k_item', 'level' => 'mtp_2.i_level', 'level_child' => 'mtp_1.i_level', 'where' => " mtp_2.i_left<=mtp_1.i_left and mtp_2.i_right>=mtp_1.i_right and mtp_2.i_level<=mtp_1.i_level " ); } function tree_ns_load_path($k_item) { // Возвращает ложь в случае ошибки if(empty($k_item)||!is_numeric($k_item)) return false; $sql=tree_ns_load_path_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['child']."=".$k_item." and t_catalog.k_item=".$sql['parent']." order by ".$sql['level'].""); // Выборка может быть отсортировна по любому полю, в том числе и по полю s_name if(!$r) return false; $a_tree=array(); $p=&$a_tree; //Указатель на текущий уровень //Если отсортировть выборку в обратном порядке, то можно обойтись без указателей // Смотрите, как это сделано при загрузке пути в дереве, заданного // списками смежности for($i=0;$i<mysql_num_rows($r);$i++) { $f=mysql_fetch_assoc($r); $p[]=array( 'k_item' => $f['k_item'], 's_name' => $f['s_name'], 'a_tree' => array() ); $p=&$p['a_tree']; } return $a_tree; } ?>
Смотрите так же: Другие способы загрузки дерева, представленного вложенными множествами Загрузка пути к вершине для дерева, представленного списками смежности Вывод дерева
