|
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 - 27/02/2005 - 07:42:16
Subject:короче! (2 Евгений)
-----------------
блин! с первым примером тоже лажа :)
вредно много сидеть по ночам :)
Короче, все очень просто устроено: если в WHERE есть переменная, то ее значение туда подставляется ПЕРЕД выполнением запроса, и что бы запрос с переменной в процессе его выполнения не делал - серверу плевать, считай, что у него константа в WHERE забита ;)
кстати, тоже самое и с join-ами - никакого построчного перебора нет, сначала вычисляются связи, накладываются условия, только потом идет результирующая выборка
--
Dmitry
[Это сообщение - спам!]
Последние сообщения из форума
Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
20457
|
|