Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.07.2009, 16:20   #1
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,150
По умолчанию SQL на вложеность

имеется таблица
id sub_id
0 0
1 0
2 0
3 1
4 3
5 4
6 4

которой соответствует дерево

Код:
0
 - 1
    - 3
       - 4
          - 5
          - 6
 -2
вопрос: можно ли организовать одним запросом получение всех элементов с указанием их принадлежности ?

типа
0
0 -> 1
0 -> 1-> 3
0 -> 1-> 3 ->4
0 -> 1-> 3 ->4 ->5
0 -> 1-> 3 ->4 ->6
0 -> 2

или нужно использовать другой подход к хранению и организации древовидной структуры?

Последний раз редактировалось ADSoft; 30.07.2009 в 16:26.
ADSoft на форуме Ответить с цитированием
Старый 30.07.2009, 18:09   #2
_Engine_
Форумчанин
 
Регистрация: 29.06.2008
Сообщений: 603
По умолчанию

select id, subid from таблица
потом разбор в цикле

Древовидные структуры обычно (у меня) так и хранятся.
_Engine_ вне форума Ответить с цитированием
Старый 30.07.2009, 18:48   #3
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

Оракловый вариант
Код:
with 
t as
(select 0 id, null sub_id from dual union all
 select 1, 0 from dual union all
 select 2, 0 from dual union all
 select 3, 1 from dual union all
 select 4, 3 from dual union all
 select 5, 4 from dual union all
 select 6, 5 from dual
 )

select 
  t.id,  
  substr(sys_connect_by_path (t.id, '->'), 3, 1000) path
from t
start with t.sub_id is null
connect by prior t.id = t.sub_id
З.Ы.: для анси-шного надо доки полистать
З.Ы.2: для корневого элемента парент должен быть нулл-овым, иначе дерево само на себя заЛУПится (от слова loop)
soleil@mmc вне форума Ответить с цитированием
Старый 30.07.2009, 22:43   #4
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,150
По умолчанию

целесообразнейй цикл в запросе делать или ... на самом деле потом в цикле делать че хотел?

а если это дерево на 1000 элементов.... не загнется запрос или цикл ?
ADSoft на форуме Ответить с цитированием
Старый 07.08.2009, 21:50   #5
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,150
По умолчанию

после изучения данного вопроса пришел к следующим выводам:
то что есть в Оракле абсолютно нет в стандартном SQL... а именно - в интересующем меня MySQL.

Оказывается существует несколько способов организации таких данных.... все они имеют свои + и -

Вот не могу решить что и как использовать....
ADSoft на форуме Ответить с цитированием
Старый 08.08.2009, 10:28   #6
wall66
Участник клуба
 
Аватар для wall66
 
Регистрация: 04.10.2008
Сообщений: 1,485
По умолчанию

Цитата:
Сообщение от ADSoft Посмотреть сообщение
...
лично я использую такой алгоритм:

сначала сделать выборку абсолютно всех записей из таблицы
попутно сложить все корневые элементы в новый массив (1)
также сложить все элементы в еще один массив (2)

для всех элементов массива (1) сформировать подмассив из тех элементов, родительский элемент которых равен текущему корневому элементу

если подмассив у корневого элемента оказался непустым - рекурсивно выполнить предыдущий шаг для подмассива

-------------

в итоге получается многомерный структурированный массив, в алгоритм можно добавить все что нужно, включая запоминание списка родительских и дочерних элементов, различные подсчеты и т п

-------------

результат выполнения этого алгоритма желательно жестко кешировать минимум на час
свободен...
wall66 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PL/SQL artemavd Помощь студентам 1 20.04.2009 10:46
SQL Ash БД в Delphi 6 26.01.2009 09:14
sql или не sql Diamand SQL, базы данных 9 18.09.2008 17:17
Запросы SQL и PL/SQL sharpest Фриланс 1 05.02.2008 18:58
SQL запрос на основе другого SQL запрса... Timoxa БД в Delphi 1 07.01.2007 18:15