|
MySQL.RU - Webboard
Вернуться
Выборка древовидной структуры (Евгений) 28/02/2005 - 14:36:34
Re: Выборка древовидной структуры (Dinky) 01/03/2005 - 00:17:57
Re: Выборка древовидной структуры (Евгений) 01/03/2005 - 03:08:05
Re: Выборка древовидной структуры (Евгений) 01/03/2005 - 03:13:02
Re: Выборка древовидной структуры (Евгений) 01/03/2005 - 03:16:04
Re: Выборка древовидной структуры (Валентин) 01/03/2005 - 13:19:02
Re: Выборка древовидной структуры (Dinky) 01/03/2005 - 19:54:01
Re: Выборка древовидной структуры (Евгений) 02/03/2005 - 13:17:39
Re: Выборка древовидной структуры всей (Валентин) 02/03/2005 - 13:41:07
Re: Выборка древовидной структуры всей (Евгений) 02/03/2005 - 16:01:09
Re: Выборка древовидной структуры всей (Валентин) 02/03/2005 - 16:17:29
Re: Выборка древовидной структуры всей (Евгений) 02/03/2005 - 17:10:13
> Original message text:
> From: Евгений - 28/02/2005 - 14:36:34
> Subject:Выборка древовидной структуры
> -----------------
> По просьбам "телезрителей" описываю способ, как одним запросом получить путь к заданному объекту в дереве :). Этот способ пришел мне в голову сразу после первого же поста, но я до самого конца надеялся, что это можно сделать изящнее, с помощью переменных пользователя, увы не получилось. Итак.
>
> Есть таблицу с древовидной структурой Tree.
> Поля таблицы Tree:
> ID (целое) - идентификатор объекта
> ParentID (целое) - идентификатор "родителя", если верхний уровень, то 0
> Level (целое) - уровень объекта, самый верхний - 0, делее 1,2....
> Path (строка) - самое интересное :) список идентификаторов ВСЕХ родителей через запятую (например 23,15,46,12). Порядок в списке особо не важен
>
> Запрос пути:
> SELECT .... FROM Tree WHERE FIND_IN_SET(ID,ObjPath) ORDER BY Level
>
> ObjPath - поле Path обекта, путь к котрому надо найти. Если известен только ID объекта, тогда придется сделать два запроса
>
> SELECT @ObjPath:=Path FROM Tree WHERE ID=ObjID;
> SELECT .... FROM Tree WHERE FIND_IN_SET(ID,@ObjPath) ORDER BY Level;
>
> В результате получим таблицу - список родителей начиная с самого верхнего, заканчивая самым последним.
> Для автоматического формирования полей Level и Path при вставке(переименовании, удалении) можно использовать триггеры или, как это сделал я, написать код в языке программирования.
>
> Воть. Ничего особенного в этом способе нет. Как выяснилось позже, этот способ давно найден и успешно эксплуатируется. А я его повторно "открыл". Вывод - надо лучше искать в Интернете :).
>
> P.S. А может есть способ проще? :)
>
From: Евгений - 01/03/2005 - 03:13:02
Subject:Выборка древовидной структуры
-----------------
К действиям могу еще добавить выборку всех (или до заданной глубины) потомков узла. Все те же 1-3 запроса :)
Из них на само,собственно, действие тратится ровно 1 запрос.
:)
[Это сообщение - спам!]
Последние сообщения из форума
Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
20526
|
|