Новости
Документация
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

> Original message text:
> 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?
> Если можно, то как примерно это реализовать?
> Спасибо.
>


From: Akina - 21/04/2011 - 20:32:35
Subject:простой запрос
-----------------
update docs
set sys_furl = replace(sys_furl, '/catalog/cpu', '/catalog/processor')
where sys_furl LIKE '/catalog/cpu%';

Само собой в реальном запросе нало принять меры, чтобы не было изгажено, скажем, значение типа'/catalog/cpu/derived/catalog/cpu/celeron' - т.е. заменять только первое вхождение.


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

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

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



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