Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Как работать с иерархией в MySql (Relaxxx) 01/07/2005 - 23:00:25
      Re: Как работать с иерархией в MySql (Slava) 03/07/2005 - 01:53:08
      Re: Как работать с иерархией в MySql (Валентин) 04/07/2005 - 10:14:36
      Re: Про ORACLE и MySQL (Валентин) 04/07/2005 - 10:20:04

> Original message text:
> From: Relaxxx - 01/07/2005 - 23:00:25
> Subject:Как работать с иерархией в MySql
> -----------------
> Здраствуйте!
> Такая проблема, у меня есть таблица которая содержит иерархию каталогов
>
> id, parent_id, name
>
> количество вложений не ограничено, к каталогам принадлежат тексты, которые имеют, например, дату создания.
> Как мне написать такой запрос, чтобы выбрал максимальную дату создания текста у выбраном каталоге и у всех его подкаталогах(тоесть одна дата, та которая будет макисимальной)
> Вот в оракл я б такое сделал бы без проблем с помощью start with, connect by и prior, а как это сделать в MySql????
>


From: Валентин - 04/07/2005 - 10:14:36
Subject:Как работать с иерархией в MySql
-----------------
Это написал не я, но писать все время заново мне не хочется...

По просьбам "телезрителей" описываю способ, как одним запросом получить путь к заданному объекту в дереве :). Этот способ пришел мне в голову сразу после первого же поста, но я до самого конца надеялся, что это можно сделать изящнее, с помощью переменных пользователя, увы не получилось. Итак.
>
> Есть таблицу с древовидной структурой 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 при вставке(переименовании, удалении) можно использовать триггеры или, как это сделал я, написать код в языке программирования.



[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
22876



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |