Новости
Документация
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: Евгений - 25/02/2005 - 11:06:23
Subject:А не проще ли хранить путь целиком?
-----------------
Была и такая мысль. Это вариант я отложил на крайний случай. Хранить в текстовом поле список ID родителей, а потом с помощью IN отбирать, а с помощью Level сортировать. Это кстати гораздо эффективней чем делать кучу запросов.
Текстовый же путь хранить неэффективно, ибо что делать если надо переименовать объект? Переименовывать также имя обекта во всех путях потомков?



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

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

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



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