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




MySQL.RU - Webboard



Вернуться
Вопрос для гуру.Выборка древовидной структуры (Евгений) 24/02/2005 - 16:36:37
      Re: Вопрос для гуру.Выборка древовидной структуры (Dinky) 24/02/2005 - 19:06:17
      Re: 2 Dinky (Евгений) 24/02/2005 - 20:25:00
      Re: 2 Dinky (Dinky) 24/02/2005 - 20:58:03
      Re: 2 Dinky (Евгений) 24/02/2005 - 21:35:23
      Re: 2 Dinky (DNick) 25/02/2005 - 01:28:11
      Re: 2 Dinky (Dinky) 25/02/2005 - 01:46:35
      Re: А не проще ли хранить путь целиком? (Dubrovsky) 25/02/2005 - 09:08:18
      Re: 2 DNick (Евгений) 25/02/2005 - 11:02:43
      Re: А не проще ли хранить путь целиком? (Евгений) 25/02/2005 - 11:06:23
      Re: А не проще ли хранить путь целиком? (Dubrovsky) 25/02/2005 - 15:27:00
      Re: А не проще ли хранить путь целиком? (Евгений) 25/02/2005 - 20:34:11
      Re: 2 DNick (Dinky) 25/02/2005 - 22:41:40
      Re: 2 DNick (Евгений) 26/02/2005 - 11:08:15
      Re: 2 Евгений (Dinky) 27/02/2005 - 07:19:19
      Re: поправка (2 Евгений) (Dinky) 27/02/2005 - 07:29:23
      Re: короче! (2 Евгений) (Dinky) 27/02/2005 - 07:42:16
      Re: короче! (2 Евгений) (Евгений) 27/02/2005 - 19:03:46
      Re: короче! (2 Евгений) (cooler13) 28/02/2005 - 00:34:16
      Re: короче! (2 Евгений) (Dinky) 28/02/2005 - 02:33:37
      Re: 2Dinky (2 Евгений) (Евгений) 28/02/2005 - 14:37:54

> Original message text:
> From: Евгений - 24/02/2005 - 16:36:37
> Subject:Вопрос для гуру.Выборка древовидной структуры
> -----------------
> Имеется таблица, в которой хранится некая древовидная структура, например, файловая система, состоящая из папок, которые, в свою очередь, могут содержать другие папки. Таблица состоит из полей
> ID - уникальный идентификатор папки
> Parent - идентификатор родительской папки
> Name - имя папки
> Level - уровень вложенности
>
> Пример:
> +----+--------+--------------------------+-------+
> ! ID ! Parent ! Name ! Level !
> +----+--------+--------------------------+-------+
> ! 1 ! 0 ! Soft ! 0 !
> ! 2 ! 1 ! OS ! 1 !
> ! 3 ! 1 ! Games ! 1 !
> ! 4 ! 1 ! Programming ! 1 !
> ! 5 ! 2 ! Linux ! 2 !
> ! 6 ! 2 ! Windows ! 2 !
> ! 7 ! 3 ! HalfLife ! 2 !
> ! 8 ! 3 ! Doom3 ! 2 !
> ! 9 ! 4 ! PHP ! 2 !
> ! 10 ! 4 ! MySQL ! 2 !
> +----+--------+--------------------------+-------+
>
> Эта таблица соответствует дереву
>
> Soft
> !
> +------------------+--------------+
> ! ! !
> OS Games Programming
> ! ! !
> +---+---+ +--+----+ +--+--+
> ! ! ! ! ! !
> Linux Windows HalfLife Doom3 PHP MySQL
>
> Задача: зная ID папки одним запросом получить "путь" к этой папке.
> Например, задав ID=8 получить след таблицу
>
> +----+--------+--------------------------+-------+
> ! ID ! Parent ! Name ! Level !
> +----+--------+--------------------------+-------+
> ! 8 ! 3 ! Doom3 ! 2 !
> ! 3 ! 1 ! Games ! 1 !
> ! 1 ! 0 ! Soft ! 0 !
> +----+--------+--------------------------+-------+
>
> Я попытался сделать это следующим образом
>
> SET @pID:=8;
> SELECT *,(@pID:=Parent) FROM mytable WHERE ID=@pID ORDER BY Level DESC;
>
> Но, почему-то, MySQL возвращает только одну строку:
>
> +----+--------+--------------------------+-------+
> ! ID ! Parent ! Name ! Level !
> +----+--------+--------------------------+-------+
> ! 8 ! 3 ! Doom3 ! 2 !
> +----+--------+--------------------------+-------+
>
> В чем ошибка?
> И возможно ли, в принципе, решить подобную задачу. Может есть идеи как по-другому реализовать структуру таблицы?
>
> Подскажите, пожалуйста.
>


From: Dinky - 24/02/2005 - 19:06:17
Subject:Вопрос для гуру.Выборка древовидной структуры
-----------------
в нормальном SQL нет рекурсий, точнее, нельзя ее описать средствами ANSI SQL
поэтому работу с деревьями реализуют программно - пишут stored procedures
или используют "расширения" конкретного сервера, или, не мучаясь, пишут простейшую рекурсивную функцию (хоть C, хоть PHP, хоть VisualBasic)
Т.е. НЕТ такого "волшебного" запроса, чтоб выдал рекурсивно данные из "волшебной" структуры ;)
С чем проблемы - с алгоритмом или с хранением? :)

--
Dmitry



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

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

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



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