Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Индексирование таблицы-матрешки  [new]
_usa__83_
Member

Откуда:
Сообщений: 249
День добрый!

Есть такая задачка. Есть таблица-матрешка с полями id, parentid ну и набором значимых полей.
Необходимо упорядочить ее таким образом, чтобы дочерние записи располагались следом за
своей родительской.

к примеру, чтоб было яснее:


id parentid something

1 0 г. Москва
2 0 г. Новосибирск
3 0 г. Владивосток
4 1 ул. Кржижановского
5 1 ул. Свободы
6 2 ул. Ленина
.........
107 5 д. 14 стр.1
......
887 6 д. 113


id и parentid - поля Integer
Запись у которой parentid = 0 является корневой

пытаюсь написать
INDEX ON IIF(EMPTY(parentid),STR(id),STR(parentid)+STR(id)) tag tagName

при первой выдаче дает "cannot create key for index tagName"
после второй выдаче почему-то индексирует ...

подскажите решение, пжалуйста
13 сен 10, 15:38    [9430682]     Ответить | Цитировать Сообщить модератору
 Re: Индексирование таблицы-матрешки  [new]
Edd.Dragon
Member

Откуда: Украина
Сообщений: 6963
_usa__83_
чтобы дочерние записи располагались следом за
своей родительской.

к примеру, чтоб было яснее:


id parentid something

1 0 г. Москва
2 0 г. Новосибирск
3 0 г. Владивосток
4 1 ул. Кржижановского
5 1 ул. Свободы
6 2 ул. Ленина
.........
107 5 д. 14 стр.1
......
887 6 д. 113


Так в примере 4-1 расположена НЕ следом за родительской.
По примеру вижу "сортировать записи в порядке по parentid, в пределах одного parentid - по id".

В запросах это будет ORDER BY parentid, id. Индекс для ускорения такой выборки аналогично по (parentid, id).
13 сен 10, 15:57    [9430788]     Ответить | Цитировать Сообщить модератору
 Re: Индексирование таблицы-матрешки  [new]
Dima T
Member

Откуда:
Сообщений: 15272
_usa__83_
Есть такая задачка. Есть таблица-матрешка с полями id, parentid ну и набором значимых полей.

Вообще-то это называется дерево. Причем в самом классическом его исполнении.
И оно не пригодно для стандартных способов выборки или сортировки. Такое рекурсивно обрабатывают.

Твой индекс решает проблему только для двухуровневого дерева, третий уровень уже не вписывается. Например (107 5 д. 14 стр.1) у тебя уже не туда куда надо встанет.

Для того чтобы можно было его стандартными средствами обработать (например отсортировать как ты хочешь или выбрать все по г.Москва) необходимо вводить дополнительные поля, по которым будет сортировка идти.
Есть разные способы, ищи алгоритмы работы с деревьями. В простейшем случае завести поле NUM, рекурсивно туда проставить 1,2,3,... а потом по нему сортировать.
13 сен 10, 16:53    [9431220]     Ответить | Цитировать Сообщить модератору
 Re: Индексирование таблицы-матрешки  [new]
_usa__83_
Member

Откуда:
Сообщений: 249
Dima T,

М-да, уж насчет того что третий в наследовании не встанет куда надо эт я не подумал ...
Пасиба, уже проще
13 сен 10, 17:11    [9431368]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить