| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Составление SQL-запросов > [MySQL]Удалить все дерево |
| Автор: Acrobat 1.6.2008, 17:13 |
| Здравствуйте, задача такая: Есть такая структура: id, pid, name, в которой хранится дерево каталогов неограниченной вложенности. Если pid = 0, значит это корневой каталог. Вопрос такой: Можно ли без рекурсий (одним вложенным запросом) удалить все дерево каталогов? Заранее благодарен! |
| Автор: skyboy 1.6.2008, 19:52 |
| одним запросом используя просто SQL - нет. возможные варианты зависят от: - СУБД и механизмов СУБД, которые можно использовать - степени привелечения в процесс клиентской программы |
| Автор: Acrobat 1.6.2008, 21:16 |
| Извиняюсь, забыл сказать. СУБД - MySql Работа происходит с помощью php скрипта. |
| Автор: skyboy 1.6.2008, 21:22 |
| какой engine используется? у innoDB есть механизм внешних ключей(foreign key), который позволяет, следуя связи между таблицами, удалять "подчиненные" записи при удалении "главной". версия какая? начиная с 5-й версии доступен механизм триггеров, которые позволяют за действием удаления закрепить некое действие в виде последовательности запросов. также возможно удаление при помощи механизма хранимых процедур, которые не дадут тебе "один запрос"(кстати, зачем такое ограничение? задание учебное, что ли?), но позволять этот набор запросов скрыть за одним именем вызываемой процедуры. такие операции, связанные с обработкой не отдельных узлов, а целых ветвей - правило или исключение? если часто приходится выбирать/удалять непосредственно целыми "ветвями", то может стоит перейти к структуре хранения nested sets? |
| Автор: Acrobat 1.6.2008, 23:05 |
| эээ... skyboy, спасибо за такое количество информации, но для меня это пока трудно..=( Задание не учебное, версия mysql 4. На самом деле нет ограничения в один запрос, просто я где то видел, правда для oracle, как нечто подобное можно было реализовать за один запрос. Сейчас я просто хочу сделать более оптимизированный запрос. И.. что такое триггер? |
| Автор: skyboy 1.6.2008, 23:21 |
| пожауйста. *без сарказма* очень жаль, что пользоваться поисковиком ты ещё не научился. трудно тебе придется. http://en.wikipedia.org/wiki/Foreign_key http://ru.wikipedia.org/wiki/%D0%A2%D1%80%D0%B8%D0%B3%D0%B3%D0%B5%D1%80_(%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85) http://dev.mysql.com/tech-resources/articles/hierarchical-data.html |
| Автор: Acrobat 2.6.2008, 11:04 |
| Спасибо, буду думать.. |