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




MySQL.RU - Webboard



Вернуться
рекурсивная функция для дерева (slaytor) 21/04/2011 - 17:16:38
      Re: рекурсивная функция для дерева (Akina) 21/04/2011 - 18:50:25
      Re: рекурсивная функция для дерева (slaytor) 21/04/2011 - 19:13:15
      Re: простой запрос (Akina) 21/04/2011 - 20:32:35



From: slaytor - 21/04/2011 - 17:16:38
Subject:рекурсивная функция для дерева
-----------------
Столкнулся с задачей, на мой взгляд не особо оригинальной и многие в сайтостроении пользуется подобными схемами.

Нагуглить толком ничего не получилось, вот обращаюсь за помощью к местным гуру.

Постараюсь как можно подробнее описать ситуацию.

Есть таблица:

CREATE TABLE IF NOT EXISTS docs (
doc_id BIGINT
UNSIGNED AUTO_INCREMENT,
parent_id BIGINT UNSIGNED,
friendurl TINYTEXT,
PRIMARY KEY (doc_id)
);

Поле parent_id - ссылка на doc_id, т. е. таблица представляет из себя дерево с бесконечным уровнем вложенности.

Таблица заполнена и база используется.

Для начала нужно добавить уникальное поле sys_furl с типом tinytext.

С этим сразу же появилась проблема, если я правильно понял, то не бывает таблиц где есть и primary key и unique полей одновременно... может и ошибаюсь..

Вопрос первый:

Как же правильно добавить это поле чтобы оно было уникальным и ничего не сломать?

Поле sys_furl должно содержать склеенные friendurl родительских записей со своей на конце .
Пример данных:
doc_id = 1
friendurl = '/catalog'
parent_id = 0
sys_furl = '/catalog'

doc_id = 2
friendurl = '/cpu'
parent_id = 1
sys_furl = '/catalog/cpu'

doc_id = 3
friendurl = '/corei7'
parent_id = 2
sys_furl = '/catalog/cpu/corei7'

Дальше хочу создать рекурсивную функцию, которая при изменении friendurl меняет sys_furl у всех дочерних записей.

Подскажите возможно ли это сделать хранимой процедурой/функцией mysql?
Если можно, то как примерно это реализовать?
Спасибо.


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

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

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



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