Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Индексирование таблицы-матрешки / 4 сообщений из 4, страница 1 из 1
13.09.2010, 15:38
    #36843764
_usa__83_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Индексирование таблицы-матрешки
День добрый!

Есть такая задачка. Есть таблица-матрешка с полями 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"
после второй выдаче почему-то индексирует ...

подскажите решение, пжалуйста
...
Рейтинг: 0 / 0
13.09.2010, 15:57
    #36843816
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Индексирование таблицы-матрешки
_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).
...
Рейтинг: 0 / 0
13.09.2010, 16:53
    #36843958
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Индексирование таблицы-матрешки
_usa__83_ Есть такая задачка. Есть таблица-матрешка с полями id, parentid ну и набором значимых полей.
Вообще-то это называется дерево. Причем в самом классическом его исполнении.
И оно не пригодно для стандартных способов выборки или сортировки. Такое рекурсивно обрабатывают.

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

Для того чтобы можно было его стандартными средствами обработать (например отсортировать как ты хочешь или выбрать все по г.Москва) необходимо вводить дополнительные поля, по которым будет сортировка идти.
Есть разные способы, ищи алгоритмы работы с деревьями. В простейшем случае завести поле NUM, рекурсивно туда проставить 1,2,3,... а потом по нему сортировать.
...
Рейтинг: 0 / 0
13.09.2010, 17:11
    #36844011
_usa__83_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Индексирование таблицы-матрешки
Dima T,

М-да, уж насчет того что третий в наследовании не встанет куда надо эт я не подумал ...
Пасиба, уже проще
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Индексирование таблицы-матрешки / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]