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 КБ)
Содержание
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 q Обсуждение статьи в форуме Не проходите мимо! Оставьте Ваш комментарий в форуме! >>> Приветсвую вас Юрий. Просматривал вашу библу 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 Не проходите мимо! Оставьте Ваш комментарий в форуме! >>> Цитирование материалов моего сайта приветствуется! при условии видимой действующей! гиперссылки на мой сайт. [Ссылки] Если Вы нашли опечатку на этой странице, пожалуйста, выделите ее мышью и нажмите Ctrl+Enter. Сделаем язык чище! (c) Yuri Popoff, 2004 - 2008, popoff.donetsk.ua, style.donetsk.ua |
|