[Закрыть]
 
popoff.donetsk.ua
Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного. /А.Энштейн/
Начало | Новости | Статьи | Форум | Опросы | Карта сайта | Обо мне
popoff.donetsk.ua - Статьи - Программирование - Модули - mysql - mysql.tree
Я это делаю
Персональное меню
Голосование
Деньги, либо любимое занятие? Постоянный адрес этого вопроса
Ваш возраст (не обязательно):

Введите целое число от 3 до 99.
Почему? (не обязательно):
Другие вопросы
Поиск по сайту
Реклама
Гинеколог, стоматолог, психотерапевт в Донецке
Статистика

mysql.tree

Постоянный адрес статьи

mysql.tree -- Библиотека для хранения деревьев Nested Sets в базах данных (Joe Celko)

Скачать

Этот модуль можно получить в составе системы popoff.donetsk.ua/light, которая распространяется на условиях GPL v.2.

Также, Вы можете скачать скрипты этого модуля в отдельном файле:
http://popoff.donetsk.ua/file/light/mysql-tree-20070210.zip (22 217 байт / 21.7 КБ)

Содержание

Функция для перемещения узлов дерева
Возвращает части sql-запроса, которые Вы можете использовать для выборки любой части дерева, относящейся к заданной вершине (путь, братья, дети, поддерево)
Возвращает массив с частями sql-запроса для выбора всех родителей заданной вершины

mysql_tree_children
Определить, есть ли у заданной вершины дети

mysql_tree_clear
Очистить дерево

mysql_tree_create
Создать таблицу, содержащую в себе дерево

mysql_tree_delete
Удалить элемент дерева. Поддерживает каскадное удаление из связанных таблиц и удаление связанных с вершинами данных, которые хранятся не в таблицах (при помощи callback-функций)

mysql_tree_enum
Производит обход дерева. Вызывает callback-функцию для всех непосредственных и косвенных потомков («внуков», «правнуков») заданного узла

mysql_tree_insert
Добавляет в дерево новую вершину. Может вставить правым или левым ребенком для заданной вершины. Сдвигает правую или левую часть дерева в зависимости от того, какая часть - меньше

mysql_tree_level
Возвращает массив с частями sql-запроса, которые необходимы для того, что бы выбрать в дереве список всех непосредственных детей заданного узла (один уровень)

mysql_tree_parent_id
Возвращает идентификатор родительской вершины для заданной вершины, отстоящей от исходной на заданное количество уровней

mysql_tree_parent_is
Проверяет, является ли одна вершина родительской по отношению к другой. Задается минимальное и максимальное количество уровней между вершинами

mysql_tree_top
Возвращает идентификатор корневого узла дерева

mysql_tree_validate
Проверяет целостность дерева

Последняя модификация: 10.02.07 05:01

Обсуждение статьи в форуме

Не проходите мимо! Оставьте Ваш комментарий в форуме! >>>

19.01.11 01:21 col

Приветсвую вас Юрий.

Просматривал вашу библу mysql.tree.
Есть соображение по поводу маленькой оптимизации в mysql_tree_delete
в блоке обработки касадного-связанного удаления
у вас строится вот такой запрос.

<?php :
"delete
  "
.$cascade[$j][0]."
from
  "
.$cascade[$j][0].",
  "
.$table." as t1,
  "
.$table." as t2
where
  t1.i_id='"
.mysql_real_escape_string($i_id)."' and
  t2.i_left between t1.i_left and t1.i_right and
  "
.$cascade[$j][0].".".$cascade[$j][1]."=t2.i_id"
?>

на мой взгляд вторичный дополнительный join для таблицы t1 избыточен  
т.к. он нужен чтобы получить i_left и i_right удаляемого узла
а они у вас уже есть в переменной $r_tree
из селекта в самом начале функции

<?php $r_tree=mysql_query_single("select * from ".$table." where i_id=".$i_id);
?>


что скажите ?

PS
кол-во проделанной работы впечатляет, особенно математики,
сам люблю мозг по нагружать =)  
Жаль только, что форма реализации кода уж совсем «дубово-простенькая».
Ни ООП, никакой абстракции.
Ну как говорится дарёному коню в зубы не смотрят.

Просмотреть все комментарии в режиме форума. Всего комментариев: 1
Не проходите мимо! Оставьте Ваш комментарий в форуме! >>>