Лазил по инету примеров не нашел только пару статей
Допустим есть база
[Name] [Num] [Lev]
Республика Беларусь 1 1
Минская область 2 2
г. Минск 3 3
5 магазинов 4 4
Республика Беларусь 5 1
Минская область 6 2
г. Заславль 7 3
15 магазинов 8 4
[Name] - название
[Num] - порядок дерева
[Lev] - уровень ноды
В результате должен получить следующее
Республика Беларусь
- Минская область
- - г. Минск
- - - 5 магазинов
- - г. Заславль
- - - 15 магазинов
Как это все прдестаывить в виде дерева?
Протсо когда делаю проверку на существование ноды (в даном примере нода Минская область повторяется) на это тратится время
Дерево строится но с большим временем
Или может кто подскажет как производить поиск по ноде на один уровень ниже.
Допустим я сейчас стою на ноде Минская область, следовательно поиск должен происходить только на 2 нода уровнем ниже (г.Минск и г. Заславль)
Загрузка дерева из БД
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
-
- Сообщения: 339
- Зарегистрирован: 22 ноя 2004, 19:15
- Откуда: Минск
- Контактная информация:
Просто набрать исходники может и любая обезьяна, а придумать и отладить не каждый человек.
Не знаю, верно ли делаю, но обычно, для хранения подчиненных данных (оно же, деревьев), использую просто ссылку на родителя.
например:
id, parent, text
0, , Минская область
1, 0, г. Минск
2, 1, 5 магазинов
3, 0, г. Заславль
4, 3, 15 магазинов
при выборке - фильтруем по полю parent, сначала по пустому (ну или можно -1 задать на некоторых базах)
потом пробегаем по сету и для каждого элемента делаем выборку по parent=id родителя и т.д. пока
выборка не будет пустая
например:
id, parent, text
0, , Минская область
1, 0, г. Минск
2, 1, 5 магазинов
3, 0, г. Заславль
4, 3, 15 магазинов
при выборке - фильтруем по полю parent, сначала по пустому (ну или можно -1 задать на некоторых базах)
потом пробегаем по сету и для каждого элемента делаем выборку по parent=id родителя и т.д. пока
выборка не будет пустая
С уважением, Lost Angel...
- Игорь Акопян
- Сообщения: 1419
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
LAngel, что называется +1
Игорь Акопян, имелось ввиду кол с плюсом ?
С уважением, Lost Angel...
-
- Сообщения: 339
- Зарегистрирован: 22 ноя 2004, 19:15
- Откуда: Минск
- Контактная информация:
4, 3, 15 магазинов
почему 3???
так это всем сводится к моему примеру.
дерво я могу загружать меня интересует вопрос как уменишть время на проверк уникальных нодов?
почему 3???
так это всем сводится к моему примеру.
дерво я могу загружать меня интересует вопрос как уменишть время на проверк уникальных нодов?
Просто набрать исходники может и любая обезьяна, а придумать и отладить не каждый человек.
- Игорь Акопян
- Сообщения: 1419
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
LAngel, имелось ввиду "аналогично"
Лелик,
ID = 4
RefParent = 3
Text = "15 магазинов"
refparent ссылается на ID родителя
Лелик,
ID = 4
RefParent = 3
Text = "15 магазинов"
refparent ссылается на ID родителя
-
- Сообщения: 339
- Зарегистрирован: 22 ноя 2004, 19:15
- Откуда: Минск
- Контактная информация:
А енсли нода уже существует?
Просто набрать исходники может и любая обезьяна, а придумать и отладить не каждый человек.
-
- Сообщения: 74
- Зарегистрирован: 10 май 2006, 12:19
- Откуда: Санкт-Петербург
- Контактная информация:
Если уже есть, то здесь по-сложнее. Придется делать лишние проверки и поиски родителя - а это время. Так что при существующем списке быстро сделать не получится. Основная проблема - перебор нодов.
Так делатьнеправильно
for i := 0 to Tree.Items.Count-1 do
if Tree.Items='ddfdf' then
Лучше так (и намного быстрее)
Noddy := MyTreeView.Items[0];
Searching := true;
while (Searching) and (Noddy <> nil) do
begin
if Noddy.text = SearchTarget then
begin
Searching := False;
MyTreeView.Selected := Noddy;
MyTreeView.SetFocus;
end
else
begin
Noddy := Noddy.GetNext
end;
end;
Так делатьнеправильно
for i := 0 to Tree.Items.Count-1 do
if Tree.Items='ddfdf' then
Лучше так (и намного быстрее)
Noddy := MyTreeView.Items[0];
Searching := true;
while (Searching) and (Noddy <> nil) do
begin
if Noddy.text = SearchTarget then
begin
Searching := False;
MyTreeView.Selected := Noddy;
MyTreeView.SetFocus;
end
else
begin
Noddy := Noddy.GetNext
end;
end;
-
- Сообщения: 268
- Зарегистрирован: 30 июн 2005, 14:53
а по моему ничем не отличаетсяvunder
- Чем юзер похож на обезьяну?
- Он жмет на все, что жмется, дергает все, что дергается и крутит все, что крутится.
- Чем юзер отличается от обезьяны?
- У обезьяны хватает ума не воспроизводить ту последовательность, которая приводит к краху системы.
- Он жмет на все, что жмется, дергает все, что дергается и крутит все, что крутится.
- Чем юзер отличается от обезьяны?
- У обезьяны хватает ума не воспроизводить ту последовательность, которая приводит к краху системы.