Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как занести в столбец иэрахию до корневого объекта? / 16 сообщений из 16, страница 1 из 1
02.12.2014, 19:29:00
    #38822979
xaxcx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как занести в столбец иэрахию до корневого объекта?
Добрый вечер я начинающий помогите разобраться:
Имеется таблица:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
  
id_object      name                   id_parent     way
1                 Россия                     0
2                 Сша                        0
3                 Вашингтон                  2
4	          Франция	             0
5                 Париж	                     4
6	           Москва		     1
7	           Кремль                    6
Как в поле way записать полный путь до объекта, например для Кремля Россия/Москва/Кремль? При внесении нового объекта поле way должно заполняться автоматически
...
Рейтинг: 0 / 0
03.12.2014, 08:56:53
    #38823213
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как занести в столбец иэрахию до корневого объекта?
xaxcxКак в поле way записать полный путь до объекта
Напишите пользовательскую функцию вычисления полного пути для одной записи по её id_object и используйте её в запросе.

xaxcxПри внесении нового объекта поле way должно заполняться автоматическиИспользуйте ту же функцию в триггере ON INSERT.
...
Рейтинг: 0 / 0
03.12.2014, 09:23:08
    #38823233
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как занести в столбец иэрахию до корневого объекта?
xaxcx,

это невозможно.
...
Рейтинг: 0 / 0
03.12.2014, 10:37:18
    #38823310
r007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как занести в столбец иэрахию до корневого объекта?
Не советую хранить путь в таблице. Придется отслеживать все изменения.
Например для строки с id_object=7 (Кремль) путь "Россия/Москва/Кремль".
Но тогда надо следить за строкой с id_object=6 (Москва) - любое изменение в ней (удаление, изменение одного из трех полей) изменить полный путь в строке с id_object=7 (Кремль).
Советую вычислять путь непосредственно когда идет обращение к данным.

Есть статьи об иерархических запросах в mysql, например:
http://club.shelek.ru/viewart.php?id=307
(Ваш случай - Классическая иерархия — id и parent_id)
...
Рейтинг: 0 / 0
03.12.2014, 10:43:14
    #38823320
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как занести в столбец иэрахию до корневого объекта?
r007Не советую хранить путь в таблице. Придется отслеживать все изменения.Это зависит от предметной области.
У нас, например, в аналогичной таблице изменения подчинения запрещены, допустимы только добавление и удаление бездочерних элементов. И вполне себе хранения пути работает.
...
Рейтинг: 0 / 0
03.12.2014, 10:55:42
    #38823338
r007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как занести в столбец иэрахию до корневого объекта?
miksoft, конечно зависит и от предметной области - если изменений/удалений в таблице не будет (только добавления), выгоднее один раз заполнить полный путь.
В Вашем примере полный путь может измениться и не только при изменении иерархии: если "Москва" заменят на "Москва-центр", то полный путь у Кремя тоже должен измениться (хотя иерархия осталась прежней).
:)
...
Рейтинг: 0 / 0
03.12.2014, 10:57:55
    #38823344
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как занести в столбец иэрахию до корневого объекта?
r007если "Москва" заменят на "Москва-центр", то полный путь у Кремя тоже должен измениться (хотя иерархия осталась прежней).Это почему же? Полный путь как был "1:6:7", так и останется.
...
Рейтинг: 0 / 0
03.12.2014, 14:13:08
    #38823664
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как занести в столбец иэрахию до корневого объекта?
r007Не советую хранить путь в таблице. Придется отслеживать все изменения.Первое в принципе не может следовать из второго.
...
Рейтинг: 0 / 0
03.12.2014, 14:15:11
    #38823669
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как занести в столбец иэрахию до корневого объекта?
miksoftПолный путь как был "1:6:7", так и останется.Материализованный (не по индексам, а по содержимому) путь изменится.
Но если существует соотв. триггер (а ещё лучше - серверная логика изменений реализована соотв. процедурами), то и путь пересчитается.
...
Рейтинг: 0 / 0
03.12.2014, 14:25:16
    #38823681
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как занести в столбец иэрахию до корневого объекта?
AkinaМатериализованный (не по индексам, а по содержимому) путь изменится.В моем представлении материализованный путь имеет смысл строить именно по индексам.
А по содержимому - какой смысл, если его всегда можно "подклеить" ?
...
Рейтинг: 0 / 0
03.12.2014, 15:07:31
    #38823746
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как занести в столбец иэрахию до корневого объекта?
xaxcx ,
банально, но довольно быстро:
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT
  n1.*,
  IFNULL(n3.name+'/','')+IFNULL(n2.name+'/','')+n1.name way,
  (n3.id_object IS NOT NULL)+(n2.id_object IS NOT NULL) parents
FROM nested3 n1
LEFT JOIN nested3 n2 ON n2.id_object=n1.id_parent
LEFT JOIN nested3 n3 ON n3.id_object=n2.id_parent


id_objectNAMEid_parentwayparents1Россия0Россия02Сша0Сша03Вашингтон2Сша/Вашингтон14Франция0Франция05Париж4Франция/Париж16Москва1Россия/Москва17Кремль6Россия/Москва/Кремль2
Случаи с б0льшим уровнем вложенности оговаривается в предельных условиях задачи
Ну. или городить огороды для произвольного уровня вложенности - на выбор
...
Рейтинг: 0 / 0
03.12.2014, 15:10:58
    #38823752
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как занести в столбец иэрахию до корневого объекта?
Cygapb-007,

блин, пока добрался с работы, опередили опровергнуть "это нивазможна"... :)
...
Рейтинг: 0 / 0
03.12.2014, 16:14:01
    #38823841
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как занести в столбец иэрахию до корневого объекта?
Cygapb-007Случаи с б0льшим уровнем вложенности оговаривается в предельных условиях задачи
Ну. или городить огороды для произвольного уровня вложенности - на выбор
Для ограниченного, заранее известного и сравнительно небольшого, уровня вложенности решение правильное. А в общем случае - увы.
Правда, если на неограниченном уровне вложенности нужны полные материализованные пути, то следует пересматривать структуру хранения данных.
...
Рейтинг: 0 / 0
03.12.2014, 16:37:58
    #38823881
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как занести в столбец иэрахию до корневого объекта?
Akina,

Согласно изложенной задаче - решение вполне рабочее. Нет там "неограниченного" количества уровней. А для неограниченного - тут есть фак, где также выложено решение. Нифига конечно не тривиальное, но вполне рабочее. :)
...
Рейтинг: 0 / 0
03.12.2014, 19:27:16
    #38824089
xaxcx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как занести в столбец иэрахию до корневого объекта?
Cygapb-007, Спасибо за ответ а можно ли както организовать запрос для произвольного уровня вложенности а так-же для удаления и вставки записей в середину иерархии?
...
Рейтинг: 0 / 0
03.12.2014, 19:29:30
    #38824091
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как занести в столбец иэрахию до корневого объекта?
xaxcx,

Тут есть ФАК по этой теме ... и даже прибитый гвоздиком кверху. Читайте и осваивайте "до полного просветления". Выбирайте себе ровно то, что надо. Там "многа чего" есть. :)
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как занести в столбец иэрахию до корневого объекта? / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]