powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как организовать пере индексацию двевовидной базы
13 сообщений из 13, страница 1 из 1
Как организовать пере индексацию двевовидной базы
    #32506779
Valerik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеется следующая таблица
ID, ParentID, LFT,RGT
мне нужно переиндексировать параметры LFT,RGT
Как это можно реализовать в запросе ?
...
Рейтинг: 0 / 0
Как организовать пере индексацию двевовидной базы
    #32507007
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Переиндексировать как?
...
Рейтинг: 0 / 0
Как организовать пере индексацию двевовидной базы
    #32508211
Valerik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LFT, RGT Написать заново..
...
Рейтинг: 0 / 0
Как организовать пере индексацию двевовидной базы
    #32508213
Valerik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я сам могу предложить простой способ у меня есть процедура добавки нового пользователся, просто взять всю табличку и как бы зановго ее создать, но только это на мой взгляд не совсем эфективно...
Долговасто получаеться если у вас записей 10000 .
...
Рейтинг: 0 / 0
Как организовать пере индексацию двевовидной базы
    #32508223
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Что это за параметры? Это задача, которую все знают?
...
Рейтинг: 0 / 0
Как организовать пере индексацию двевовидной базы
    #32508312
Valerik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну наверное не все,
LFT,RGT и спользуеться для облегчения построения древовидной таблици, то есть зная эти параметры вы можете определить сколько подписанно под данной записью вааабще не зависило от уровня вложенности.
Просто так обьянить
если хотите узнать вот статья на эту тему
http://sdm.viptop.ru/articles/sqltrees.html
...
Рейтинг: 0 / 0
Как организовать пере индексацию двевовидной базы
    #32508453
Фотография Zenia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хорошая статья...
...
Рейтинг: 0 / 0
Как организовать пере индексацию двевовидной базы
    #32508462
Sergey_New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Статья хорошая, но как программно расчитывать LFT,RGT?
...
Рейтинг: 0 / 0
Как организовать пере индексацию двевовидной базы
    #32508467
Фотография Zenia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну там вроде все разжовано, только придется процедуры писать на VBA
...
Рейтинг: 0 / 0
Как организовать пере индексацию двевовидной базы
    #32508471
Sergey_New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Zenia
Так в процедуре и есть все самое сложное, чего и нет в статье.
...
Рейтинг: 0 / 0
Как организовать пере индексацию двевовидной базы
    #32508535
Фотография Zenia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну и вправду процедуры заполнения дыр или поиска ошибок очень сложные... но мне понравилась идея. хотя стоитли вообще применять такую структуру
...
Рейтинг: 0 / 0
Как организовать пере индексацию двевовидной базы
    #32508559
Sergey_New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В некоторых случаях без иерархической структуры не обойтись.
Я вот бьюсь с подобной проблемой.
Пока безуспешно :(
...
Рейтинг: 0 / 0
Как организовать пере индексацию двевовидной базы
    #32510009
Valerik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня есть идея незнаю будет ли она эфективной..
рссказываю в краце.

имееться таблица допустим с таким деревом
Id, ParetId ,LFT,RGT
1, 0 ,0,0
2,1,0,0
3,1,0,0
4,2,0,0
5,2,0,0
6,3,0,0
7,3,0,0
8,7,0,0
Делаем запрос для подсчета сколько под каждым подписанно в первом уровне.
врезультате получем
1,2
2,2
3,2
4,0
5,0
6,0
7,1
8,0
Сортируем по возрастанию и по номеру.. получаем
8,0
6,0
5,0
4,0
7,1
3,2
2,2
1,2

И скаладываем все подкем подписанны с тем количеством сколько подписанны.
и получаем
8,0
6,0
5,0
4,0
7,1
3,3
2,2
1,7
И сортируем в порядке убывания по коичеству подписанных под ним..
1,7
2,2
3,3
7,1
4,0
5,0
6,0
8,0
И начинаем присваивать значения LFT в том порядке которв они сейчас находятться дл этого находи первого укоторого количество подписанных под ним самое большое в данном лучает это 1, и ставим у него значение LFT=1
так как он первый,
Для других значение LFT расчитываеться по словиям .
if Max( членов превного уроня.RGT) = 0 then
Мой.LFT=Спонсор.LFT+1
else
Мой.LFT=Max( членов превного уроня.RGT) +1
end if
_______________________________________________________
RGT Расчитываються по следующей формуле RGT=мой.LFT+(количество подомной подписанно *2)+1

______________________________
______________________________
Вот что у нас получаеться

1, спонсара нет LFT=1 , RGT=1+(7*2)+1=16
2, Max( членов превного уроня.RGT) = 0 тогда мой.LFT=спонсор.LFT+1 =2, RGT=2+(2*2)+1=7
3, Max( членов превного уроня.RGT) = 7 тогда мой.LFT=Max( членов превного уроня.RGT)+1= 8, RGT=8+(3*2)+1=15
7, Max( членов превного уроня.RGT) = 0 тогда мой.LFT=спонсор.LFT+1 =9, RGT=9+(1*2)+1=12
4, Max( членов превного уроня.RGT) = 0 тогда мой.LFT=спонсор.LFT+1 =3, RGT=3+(0*2)+1=4
5, Max( членов превного уроня.RGT) = 4 тогда мой.LFT=Max( членов превного уроня.RGT)+1 =5, RGT=5+(0*2)+1=6
6,Max( членов превного уроня.RGT) = 12 тогда мой.LFT=Max( членов превного уроня.RGT)+1 =13, RGT=13+(0*2)+1=14
8, Max( членов превного уроня.RGT) = 0 тогда мой.LFT=спонсор.LFT+1 =10, RGT=10+(0*2)+1=11
Врезультате мы получаем
ID,ParetID,LFT,RGT
1, 0,1,16
2, 1,2,7
3, 1,8,15
7, 3,9,12
4, 2,3,4
5, 2,5,6
6, 3,13,14
8, 7,10,11
Полчили то что хотели, только я незна насколько бысто это все будет работать.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как организовать пере индексацию двевовидной базы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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