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




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: Валентин - 02/03/2005 - 13:41:07
Subject:Выборка древовидной структуры всей
-----------------
Я крутил всякие деревья и вопрос такой:
Сможешь ли ты извлеч весь справочник в правильной повледовательности, правильной:
родитель
родитель
чилд
родитель
чилд
чилд
и т.д.

Для Dinky Подход действительно неплохой, а древовидные структуры тоже не стоит совать везде, например в журнал операций не нужно, если там записей будет млн.10, а в практике справочники товаров или еще чего обычно не превышают smallint 65535 записей, если не ошибаюсь, если даже база будет работать лет 10-15 с мусором справочник не превысит 300 тыс записей...
Ты конечно прав в том, что инструмент нужно применять там где он нужен, но от этого инструмент сам по себе не будет плохим или хорошим - это просто инструмент.
В качестве инструмента я имею ввиду подход к деревьям в топике. Лучше обсудить 1 нормальную, интересную и нужную тему, чем отвечать на вопросы типа "Как поставить кодировку?", "У меня MySQL не запускается", "Я хочу всего, а у меня версия 3.23" и др...


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

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

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



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