|
|
|
Как организовать пере индексацию двевовидной базы
|
|||
|---|---|---|---|
|
#18+
Имеется следующая таблица ID, ParentID, LFT,RGT мне нужно переиндексировать параметры LFT,RGT Как это можно реализовать в запросе ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2004, 07:59 |
|
||
|
Как организовать пере индексацию двевовидной базы
|
|||
|---|---|---|---|
|
#18+
Переиндексировать как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2004, 11:02 |
|
||
|
Как организовать пере индексацию двевовидной базы
|
|||
|---|---|---|---|
|
#18+
LFT, RGT Написать заново.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2004, 21:59 |
|
||
|
Как организовать пере индексацию двевовидной базы
|
|||
|---|---|---|---|
|
#18+
Я сам могу предложить простой способ у меня есть процедура добавки нового пользователся, просто взять всю табличку и как бы зановго ее создать, но только это на мой взгляд не совсем эфективно... Долговасто получаеться если у вас записей 10000 . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2004, 22:03 |
|
||
|
Как организовать пере индексацию двевовидной базы
|
|||
|---|---|---|---|
|
#18+
Что это за параметры? Это задача, которую все знают? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2004, 22:31 |
|
||
|
Как организовать пере индексацию двевовидной базы
|
|||
|---|---|---|---|
|
#18+
Ну наверное не все, LFT,RGT и спользуеться для облегчения построения древовидной таблици, то есть зная эти параметры вы можете определить сколько подписанно под данной записью вааабще не зависило от уровня вложенности. Просто так обьянить если хотите узнать вот статья на эту тему http://sdm.viptop.ru/articles/sqltrees.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2004, 05:39 |
|
||
|
Как организовать пере индексацию двевовидной базы
|
|||
|---|---|---|---|
|
#18+
хорошая статья... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2004, 09:23 |
|
||
|
Как организовать пере индексацию двевовидной базы
|
|||
|---|---|---|---|
|
#18+
Статья хорошая, но как программно расчитывать LFT,RGT? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2004, 09:30 |
|
||
|
Как организовать пере индексацию двевовидной базы
|
|||
|---|---|---|---|
|
#18+
ну там вроде все разжовано, только придется процедуры писать на VBA ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2004, 09:34 |
|
||
|
Как организовать пере индексацию двевовидной базы
|
|||
|---|---|---|---|
|
#18+
2 Zenia Так в процедуре и есть все самое сложное, чего и нет в статье. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2004, 09:38 |
|
||
|
Как организовать пере индексацию двевовидной базы
|
|||
|---|---|---|---|
|
#18+
ну и вправду процедуры заполнения дыр или поиска ошибок очень сложные... но мне понравилась идея. хотя стоитли вообще применять такую структуру ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2004, 10:20 |
|
||
|
Как организовать пере индексацию двевовидной базы
|
|||
|---|---|---|---|
|
#18+
В некоторых случаях без иерархической структуры не обойтись. Я вот бьюсь с подобной проблемой. Пока безуспешно :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2004, 10:29 |
|
||
|
Как организовать пере индексацию двевовидной базы
|
|||
|---|---|---|---|
|
#18+
У меня есть идея незнаю будет ли она эфективной.. рссказываю в краце. имееться таблица допустим с таким деревом 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 Полчили то что хотели, только я незна насколько бысто это все будет работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2004, 07:56 |
|
||
|
|

start [/forum/topic.php?fid=45&tid=1674784]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
171ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
26ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 432ms |

| 0 / 0 |
