Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как правильно построить дерево / 11 сообщений из 11, страница 1 из 1
23.05.2013, 13:35:28
    #38269981
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно построить дерево
Код: plaintext
1.
2.
3.
id_s    id_p     id_r
2       1            5
2       1            6
данная структура означает, что корнем для id_p=1 является id_s=2, в свою очередь корнем для id_r=5 и id_r=6 является id_p=1
Как отобразить такую структуру в виде дерева?
...
Рейтинг: 0 / 0
23.05.2013, 13:54:14
    #38270026
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно построить дерево
Создать DefaultMutableTreeNode root=new DefaultMutableTreeNode("Дерево документов");
Далее: пробежаться по строчкам, каждый раз создавая DefaultMutableTreeNode и проверяя его наличие в root, если в root его нет - добавить, и т.д., как-то так? Если такой вариант имеет место быть, то как проверить присутствует ли вновь вставляемый DefaultMutableTreeNode в дереве?
...
Рейтинг: 0 / 0
23.05.2013, 14:15:58
    #38270081
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно построить дерево
Для начала хорошо бы разобраться какой именно подход здесь используется.
Для хранения дерева в RDBMS существуют разнцые способы.
Просто у вас как-то странно выходит в 2х записях 4 узла.
...
Рейтинг: 0 / 0
23.05.2013, 14:18:55
    #38270091
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно построить дерево
Blazkowicz,
+1
id parent_id name
...
Рейтинг: 0 / 0
23.05.2013, 14:26:21
    #38270104
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно построить дерево
http://habrahabr.ru/post/153861/ Деревья в базах данных можно хранить тремя основными методами: Adjacency List, Matherialized Path & Nested Set. Когда мы хотим переехать с AL на NS, это можно сделать с помощью рекурсии (если БД расово верная). Но что делать в случае MySQL?

Краткий обзор методов хранения деревьев в БД

Если кратко, то:

AL — когда у нас родитель хранится в колонке типа parent_id: ''1''
MP — полный путь до элемента хранится в колонке типа path: ''1.2.5''
NS — пара колонок lft и rgt, хранящие диапазон всех вложенных элементов, например, корень дерева из 9 элементов будет иметь левое значение ''1'', а правое — ''18''
...
Рейтинг: 0 / 0
23.05.2013, 14:31:16
    #38270117
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно построить дерево
Изначально данные разбросаны по 3 таблицам, собираю я их вот таким запросом:
Код: sql
1.
2.
3.
4.
5.
6.
7.
select 
	a.id as id_schetin,
	b.id as id_prihodnakl,
	c.id as id_rko
from schetin a 
left join prihodnakl b on a.id=b.id_schetin
left join rko c on (a.id=c.id_schetin or b.id=c.id_prihodnakl)


результат запроса показан на скрине. вот такая вот ситуация....
...
Рейтинг: 0 / 0
23.05.2013, 14:33:06
    #38270124
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно построить дерево
JulTИзначально данные разбросаны по 3 таблицам, собираю я их вот таким запросом:
результат запроса показан на скрине. вот такая вот ситуация....
Запрос высечен в граните и поменять его на нормальный шансов нет?
Можно ведь просто привести к такому виду:
14338755
...
Рейтинг: 0 / 0
23.05.2013, 14:38:09
    #38270138
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно построить дерево
BlazkowiczJulTИзначально данные разбросаны по 3 таблицам, собираю я их вот таким запросом:
результат запроса показан на скрине. вот такая вот ситуация....
Запрос высечен в граните и поменять его на нормальный шансов нет?
Можно ведь просто привести к такому виду:
14338755
запрос можно менять как угодно, но я пока не знаю как, может вы поможете?
...
Рейтинг: 0 / 0
23.05.2013, 14:44:21
    #38270152
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно построить дерево
JulTзапрос можно менять как угодно, но я пока не знаю как, может вы поможете?
Поменять JOIN на UNION что-то вроде такого
Код: sql
1.
2.
3.
4.
5.
SELECT ID, NULL as parent_id, NAME from schetin 
UNION 
SELECT ID, schetin_id as parent_id, NAME from prihodnakl 
UNION
SELECT ID, prihodnakl_id as parent_id, NAME from rko 
...
Рейтинг: 0 / 0
23.05.2013, 14:46:28
    #38270156
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно построить дерево
С другой стороны, когда каждый уровень находится в своей таблице, то зачем всё складывать в одну кучу.
Загружайте данные для каждого уровня разными методами из 3х разных таблиц. Можно ленивым подходом. Только если юзер открывает ноду.
...
Рейтинг: 0 / 0
23.05.2013, 15:08:11
    #38270211
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно построить дерево
BlazkowiczС другой стороны, когда каждый уровень находится в своей таблице, то зачем всё складывать в одну кучу.
Загружайте данные для каждого уровня разными методами из 3х разных таблиц. Можно ленивым подходом. Только если юзер открывает ноду.
в другом месте у меня реализована лэйзи загрузка данных из ноды, т.к. узлов и под узлов там очень много, здесь же данных будет от силы до уровня 10, поэтому когда пользователь открывает дерево с, например, 3 узлами и 2 под узлами, ленивый подход не совсем кстати, хочется чтобы дерево отображалось полностью. Вообщем идею я вроде поняла, спасибо за наводящие мысли, ушла пробовать))
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Как правильно построить дерево / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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