2014-07-10 3 views
0

Я храню доменные имена в таблице, формат таблицаMySQL рекурсивного UPDATE детских строк одной таблицы

**id** **node_name**   **name**  **parent_id** 
    1  com     com   null 
    2  example    example.com  1 
    3  test    test.example.com  2 
    4  dev   dev.test.eaxmple.com 3 
    5  good   good.example.com  2 

Теперь мой вопрос, я хочу, чтобы обновить «пример», чтобы «что-то» с помощью MySQL рекурсивного обновления запрос. Когда я обновляю «пример» на «что-то», я хочу, чтобы все его дети обновлялись до «чего-то».

ВЫВОД:

**id** **node_name**   **name**  **parent_id** 
    1  com     com   null 
    2  something   something.com  1 
    3  test    test.something.com  2 
    4  dev   dev.test.something.com 3 
    5  good   good.something.com  2  

Спасибо, Нагеш

+0

В настоящее время MySQL (5.6.x) не реализует рекурсивные запросы. Чтобы получить полный путь, вы можете реализовать i.e [таблицу закрытия} (http://karwin.blogspot.de/2010/03/rendering-trees-with-closure-tables.html) или вложенные наборы. – VMai

+0

Спасибо VMai за ваш ответ. Я новичок в MySql, есть ли другой способ решить эту проблему простым способом. – nagesh

+0

Вы хотели бы обновить все строки, у которых есть parent_id из 2. Вы также хотите обновить строки, у которых есть parent_id из 3 или 5? – Jenn

ответ

0

Я решил эту проблему с помощью простых отборных и обновления команд. Я тестировал его, он работает нормально. Если кто-либо из вас найдет что-то не так в этом заявлении, plz не стесняется комментировать.

select id into @domainId from domain where name = 'example.com'; 
select name into @parentName from domain where 
    id = (select parent_id from domain where name = 'example.com'); 
set @updatedName = concat('something', '.', @parentname); 
update domain set node_name = 'something', name = @updatedName where id = @domainId; 

update domain set name = concat(SUBSTRING_INDEX(name, concat('.','example.com'), 1), '.', 
@updatedName) where name like concat('%', '.', 'example.com'); 
Смежные вопросы