при чем тут ПХП ? Алгоритмы чаще всего не зависят от языка реализации. b-trees - это алгоритм построения индексов в БД (не только mysql). Индексы хранятся в виде дерева, собственно поэтому сюда и написали об этом алгоритме.но это вроде это кишки mysql а не алгоритм деревьев пхп
ты с алгоритмом nested sets разобрался ? В этих полях хранится структура дерева. Вообще-то level необязателен, но с ним просто удобнее.зачем left, right, level?
в общем да хотя вопрос с каким из них только в топике 2 обговаривалиты с алгоритмом nested sets разобрался ?
мои учителя говорили что так делать нельзяlevel необязателен, но с ним просто удобнее.
я знаю (видел что в оракле тоже использован), я говорил что это не для пхп те к теме не относилосьb-trees - это алгоритм построения индексов в БД
level в некоторых запросах очень даже помогает. ИМХО одно "лишнее" int поле - это не страшно. Что касается "чистоты данных" - то я не стесняюсь создавать лишние поля в таблицах если это повысит производительностьвот тут тоже вопрос : с одной стороны память с другой процессор на что наплевать?
я за чистые данные (в данном случии у дерева) если не прав обьясните начинающему
нет не ID, это правое смещение. На http://dev.e-taller.net/dbtree есть статьи по этой теме.right если это id то ясно а если нет то что?
<HTML>
<BODY>
<?
// Класс с описанием формата начальных данных
class tree_element {
var $name; // Название элемента
var $id; // Его идентификатор
var $pid; // Идентификатор его родителя
// Конструктор класса
function tree_element($name,$id,$pid) {
$this->name=$name;
$this->id=$id;
$this->pid=$pid;
return 0;
}
}
// Начальные данные
$tree[]=new tree_element("Атлоны XP",1,7);
$tree[]=new tree_element("Тачки",2,0);
$tree[]=new tree_element("Русские",3,2);
$tree[]=new tree_element("ВАЗ",4,3);
$tree[]=new tree_element("Иностранные",5,2);
$tree[]=new tree_element("BMW",6,5);
$tree[]=new tree_element("Компы",7,0);
$tree[]=new tree_element("Селероны P4",8,7);
$tree[]=new tree_element("Mercedes",9,5);
// Массив выходных значений ф-ии get_children
$result=array();
// Ф-я возвращает идентификаторы элементов,
// пренадлежащих элементу с заданным идентификатором
function get_children($id) {
global $tree;
global $result;
$result=array(); // Очищаем массив выходных значений
for ($i=0; $i<count($tree); $i++) {
if ($tree[$i]->pid==$id) {
$result[]=$tree[$i]->id;
}
}
return 0;
}
// Ф-я построения ветки дерева, начиная с элемента
// с заданным идентификатором
function get_branch($id) {
global $tree;
global $result;
get_children($id);
$temp=$result;
if ($id) echo "<li>".$tree[$id-1]->name."<ul>\n";
for ($i=0; $i<count($temp); $i++) {
get_branch($temp[$i]); // Рекурсия
}
if ($id) echo "</ul>\n";
return 0;
}
// Построение дерева, начиная с элемента
// с идентификатором '0'
echo "<ul>";
get_branch(0);
echo "</ul>";
?>
</BODY>
</HTML>
http://dev.e-taller.net/dbtree/phpDbTree.zipкакие классы реализируют nested sets дерево?
насколько часто будет обновляться дерево,о чём надо подумать заранее при реализе дерева?