Выбор однонаравленного списка из базы данных MySQL
От: Kastusik  
Дата: 15.12.05 09:34
Оценка:
Здравствуйте!
Задача такая на MySQL запрос.
Преамбула:
Имеется таблица с тремя полями: id, sub_id, name. id — ключевое поле. Эта таблица реализует своими записями дерево (которое растет вниз) следующим образом: корневой элемент дерева имеет sub_id=0, дочерний элемент списка имеет sub_id = id родителя и так далее. Дочерних у каждого элемента может быть несколько.
Задача:
Задан id некого элемента в этом дереве.
Надо наиболее оптимальным способом (одним запросом) выбрать все вышестоящие элементы (всех старших родственников) по заданному id.
Re: Выбор однонаравленного списка из базы данных MySQL
От: Kastusik  
Дата: 15.12.05 09:54
Оценка:
Дополнение: рисунки.
Исходные данные:

Выходные данные:
Re: Выбор однонаравленного списка из базы данных MySQL
От: wildwind Россия  
Дата: 15.12.05 10:45
Оценка:
Здравствуйте, Kastusik, Вы писали:

K>Надо наиболее оптимальным способом (одним запросом) выбрать все вышестоящие элементы (всех старших родственников) по заданному id.


В текущей структуре одним запросом не удасться.
Можно изменить представление данных, см. http://gzip.rsdn.ru/article/db/Hierarchy.xml
Автор(ы): Михаил Голованов
Дата: 28.01.2002
Re: Выбор однонаравленного списка из базы данных MySQL
От: Docker Канада  
Дата: 15.12.05 15:04
Оценка:
Здравствуйте, Kastusik, Вы писали:

...

Посмотри тут Storing Hierarchical Data in a Database на Modified Preorder Tree Traversal
Re: Выбор однонаравленного списка из базы данных MySQL
От: Kastusik  
Дата: 15.12.05 18:07
Оценка:
Спасибо всем!
Re: Выбор однонаравленного списка из базы данных MySQL
От: Lepsik Гондурас https://www.kirdyk.club/
Дата: 15.12.05 22:24
Оценка:
так что ли ?


create table tbl  (id int not null, subid int not null, name char(12))



insert into tbl (id, subid, name) values (1, 0, 'aq')
insert into tbl (id, subid, name) values (2, 0, 'aw')
insert into tbl (id, subid, name) values (3, 0, 'ae')
insert into tbl (id, subid, name) values (4, 0, 'ar')
insert into tbl (id, subid, name) values (5, 0, 'at')
insert into tbl (id, subid, name) values (6, 0, 'ay')
insert into tbl (id, subid, name) values (7, 3, 'au')
insert into tbl (id, subid, name) values (8, 0, 'ai')
insert into tbl (id, subid, name) values (9, 0, 'ao')
insert into tbl (id, subid, name) values (10, 0, 'ao')
insert into tbl (id, subid, name) values (11, 7, 'ao')
insert into tbl (id, subid, name) values (12, 0, 'ao')
insert into tbl (id, subid, name) values (13, 11, 'ao')


select a.* from tbl a, tbl b where b.subid=a.id order by a.id




    3 0 ae
    7 3 au
    11 7 ao


если бы потрудился оформлять сообщения в таком виде то было бы более проще понять что имел ввиду
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.