Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

TreeNS: класс для манипуляции с данными иерархического типа модели вложенных множеств (Rin)
Author Message
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 180
   поощрить/наказать

Location: Москва

PostPosted: Thu Oct 18, 2007 11:31 am (написано за 5 минут 37 секунд)
   Post subject: TreeNS: класс для манипуляции с данными иерархического типа модели вложенных множеств
Reply with quote

Preordered tree traversal (tree of nested sets) library for PHP.

НАЗНАЧЕНИЕ
Класс для манипуляции с данными иерархического типа, которые хранятся в таблицах БД.
Алгоритм хранения данных в табличной структуре основывается на модели вложенных множеств,
которая дает преимущества в скорости извлечения данных.
Методы добавления/удаления узлов дерева оптимизированы таким образом, что бы пересчитывать минимальную часть дерева.
Используется класс MysqlRapid (forum.dklab.ru/viewtopic.php?t=26693) в качестве интерфейса обращения к БД MySQL.

ВОЗМОЖНОСТИ
  1. Создание, очистка основной таблицы и таблицы дерева
  2. Вставка одного или нескольких узлов дерева, перемещение и удаление
  3. Изменение порядка следования (позиции) узлов
  4. Выборка потомков (субдерева на заданную глубину), предков относительно заданного узла
  5. Добавление в массив узлов осей XPath-2.0 ("родственные связи") относительно заданного узла
  6. Проверка целостности данных
СОГЛАШЕНИЯ
Структура дерева и пользовательские данные хранятся в разных таблицах.
Для именования таблицы со структурой дерева используется окончание '_tree' после названия основной таблицы.
Существующие поля таблицы БД со структурой дерева:
  id, ns_left, ns_right, ns_level
Вычисляемые поля в результатах выборки:
  pid -- id родительского узла
  ns_child_count -- кол-во дочерних записей (на 1 уровень вглубь)
  ns_descendant_count -- кол-во записей-потомков


XPath-axes.png
 Description:
XPath 2.0 Axis Specifiers
 Filesize:  18.45 KB
 Viewed:  31022 Time(s)

XPath-axes.png



TreeNS.png
 Description:
Пример представления данных в виде дерева модели вложенных вножеств.
 Filesize:  1.93 KB
 Viewed:  31142 Time(s)

TreeNS.png



TreeNS-2.4.1.rar
 Description:
Preordered tree traversal (tree of nested sets) library for PHP

Download
 Filename:  TreeNS-2.4.1.rar
 Filesize:  40.28 KB
 Downloaded:  1200 Time(s)



Last edited by Rin on Wed Oct 15, 2008 9:34 am; edited 16 times in total
Back to top
View user's profile Send private message Send e-mail
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 180
   поощрить/наказать

Location: Москва

PostPosted: Thu Oct 18, 2007 11:36 am (спустя 4 минуты; написано за 56 секунд)
   Post subject:
Reply with quote

CHANGELOG

2.0.0
  1. Первая версия была написана в октябре 2003 года.
    В качестве интерфейса доступа к БД использовался класс PEAR::DB.
    Во второй версии был сделан рефакторинг: переход на MysqlRapid,
    а так же другие множественные улучшения.
Back to top
View user's profile Send private message Send e-mail
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 180
   поощрить/наказать

Location: Москва

PostPosted: Wed Oct 31, 2007 4:12 pm (спустя 13 дней 4 часа 36 минут; написано за 32 секунды)
   Post subject:
Reply with quote

2.1.0
  1. Метод setRelatives() добавляет в массив узлов родственные связи относительно заданного узла
    по спецификации XPath2, т.о. метод не совместим с предыдущей реализацией.
  2. Переименованы вычисляемые поля:
    ns_count -> ns_child_count (кол-во дочерних узлов)
    ns_count_recursive -> ns_descendant_count (кол-во узлов-потомков)
  3. В таблице со структурой дерева сделан составной индекс `ns_all` (см. TreeNS.create.sqlt)
Back to top
View user's profile Send private message Send e-mail
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 180
   поощрить/наказать

Location: Москва

PostPosted: Fri Nov 02, 2007 9:39 am (спустя 1 день 17 часов 26 минут; написано за 47 секунд)
   Post subject:
Reply with quote

2.2.0
  1. Переименованы методы:
    childrenSQL() -> descendantsSQL()
    parentsSQL() -> ancestorsAndSelfSQL()
  2. Другие небольшие правки в SQL запросах методов selectRow() и dump()
Back to top
View user's profile Send private message Send e-mail
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 180
   поощрить/наказать

Location: Москва

PostPosted: Wed Nov 07, 2007 6:36 pm (спустя 5 дней 8 часов 57 минут; написано за 21 секунду)
   Post subject:
Reply with quote

2.2.1
  1. Исправлена ошибка в методе move(), при которой в не всегда можно было переместить запись.
    Ошибка появилась в версии 2.2.0 и не является критичной (целостность дерева БД никак не нарушается), но обновление рекомендуется.
Back to top
View user's profile Send private message Send e-mail
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 180
   поощрить/наказать

Location: Москва

PostPosted: Wed Nov 28, 2007 11:47 am (спустя 20 дней 17 часов 11 минут; написано за 17 секунд)
   Post subject:
Reply with quote

2.2.2
  1. Относительно большие SQL запросы вынесены из методов в отдельные TreeNS.*.sqlt файлы
  2. MysqlRapid обновлен до версии 1.5.0
Back to top
View user's profile Send private message Send e-mail
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 180
   поощрить/наказать

Location: Москва

PostPosted: Thu Feb 21, 2008 4:38 pm (спустя 2 месяца 23 дня 4 часа 51 минуту; написано за 30 секунд)
   Post subject:
Reply with quote

2.2.3
  1. MysqlRapid обновлен до версии 1.5.1
2.2.4
  1. MysqlRapid обновлен до версии 1.6.0
Back to top
View user's profile Send private message Send e-mail
Guest






Карма: 386
   поощрить/наказать


PostPosted: Thu Mar 20, 2008 8:42 pm (спустя 28 дней 4 часа 4 минуты; написано за 10 секунд)
   Post subject:
Reply with quote

Можно пример использования?
Back to top
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 180
   поощрить/наказать

Location: Москва

PostPosted: Thu Mar 20, 2008 9:58 pm (спустя 1 час 15 минут; написано за 19 секунд)
   Post subject:
Reply with quote

А в чём возникла сложность? :)
Back to top
View user's profile Send private message Send e-mail
Guest






Карма: 386
   поощрить/наказать


PostPosted: Fri Mar 21, 2008 6:20 am (спустя 8 часов 22 минуты; написано за 20 секунд)
   Post subject:
Reply with quote

Хотя бы в этом Call to a member function query() on a non-object. Я пока только учусь...
Back to top
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 180
   поощрить/наказать

Location: Москва

PostPosted: Fri Mar 21, 2008 9:24 pm (спустя 15 часов 4 минуты; написано за 2 минуты 12 секунд)
   Post subject:
Reply with quote

Я напишу пример использования позже.
Чтобы исправить Вашу ошибку, в конструктор класса TreeNS нужно передавать объект (экземпляр класса) MysqlRapid.
Back to top
View user's profile Send private message Send e-mail
Guest






Карма: 386
   поощрить/наказать


PostPosted: Fri Mar 21, 2008 10:15 pm (спустя 50 минут; написано за 17 секунд)
   Post subject:
Reply with quote

Спасибо, разобрался ;)
Back to top
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 180
   поощрить/наказать

Location: Москва

PostPosted: Sun Mar 23, 2008 7:52 pm (спустя 1 день 21 час 36 минут; написано за 47 секунд)
   Post subject:
Reply with quote

2.2.5
  1. В метод setRelatives добавлены новые "родственные связи",
    которые явл. расширением стандарта XPath-2.0:
    ns_is_first-sibling -- First sibling element, in document order
    ns_is_last-sibling -- Last sibling element, in document order
    ns_is_first -- First element, in document order
    ns_is_last -- Last element, in document order
  2. MysqlRapid обновлен до версии 1.6.5
Back to top
View user's profile Send private message Send e-mail
Guest






Карма: 386
   поощрить/наказать


PostPosted: Mon Mar 24, 2008 5:39 pm (спустя 21 час 47 минут; написано за 45 секунд)
   Post subject:
Reply with quote

Здравствуйте. А я бы от примерчика не отказался. Если не затруднит выложите пожайлуста.
Back to top
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 180
   поощрить/наказать

Location: Москва

PostPosted: Fri Mar 28, 2008 12:53 pm (спустя 3 дня 19 часов 13 минут; написано за 20 секунд)
   Post subject:
Reply with quote

2.3.0
  1. Изменены параметры в конструкторе в сторону упрощения.
  2. Метод dump() переименован в select() и модернизирован.
  3. Добавлен пример использования класса.
  4. MysqlRapid обновлен до версии 1.6.6
Back to top
View user's profile Send private message Send e-mail
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 180
   поощрить/наказать

Location: Москва

PostPosted: Mon Sep 01, 2008 1:03 pm (спустя 5 месяцев 4 дня 10 минут; написано за 20 секунд)
   Post subject:
Reply with quote

2.4.0
  1. Для увеличения скорости шаблонизатор SqlTemplate больше не используется.
    Все *.sqlt шаблоны переписаны в *.sql.php шаблоны.
  2. MysqlRapid обновлён до версии 2.0.0
Back to top
View user's profile Send private message Send e-mail
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 180
   поощрить/наказать

Location: Москва

PostPosted: Wed Oct 15, 2008 9:35 am (спустя 1 месяц 13 дней 20 часов 31 минуту; написано за 28 секунд)
   Post subject:
Reply with quote

2.4.1
  1. Исправлены ошибки в TreeNS_example.php
  2. MysqlRapid обновлён до 2.1.0
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
Оставаться вывоз мусора контейнером любых объемов. . Смотрите на сайте успешно продаются вентиляторные и эжекционные градирни отечественного.
XML