Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Получение цепочки "родитель" - "потомок" - "внук", связанных id_parent
 
 автор: Reша   (15.02.2007 в 11:46)   письмо автору
 
 

Есть табличка tbl:
id
id_parent
name

id_parent - это идентификатор записи из той же таблицы, которая является "родителем" этой записи (соответственно, у "корневых" записей id_parent = 0).

Стоит задача - по идентификатору родителя удалить всё дерево его потомков.

Удаление только "детей" по идентификатору ($id) записи просто:


DELETE FROM tbl WHERE id_parent = $id


, но мне нужно удалить не только "детей", но и "внуков", "правнуков" и т.д.

Возможна ли реализация без рекурсивного прогона запроса в PHP (там будет до 10 уровней "потомства", соответственно, получится 10 запросов)? Если возможно, то как решить эту задачу средствами MySQL?

   
 
 автор: cheops   (15.02.2007 в 12:15)   письмо автору
 
   для: Reша   (15.02.2007 в 11:46)
 

Можно решить без рекурсии, если использовать таблицы типа InnoDB и внешние ключи с каскадным удалением.

   
 
 автор: Reша   (15.02.2007 в 12:19)   письмо автору
 
   для: cheops   (15.02.2007 в 12:15)
 

А можно поподробнее? Видимо, Вы хорошо в этом разбираетесь :)

   
 
 автор: Trianon   (15.02.2007 в 12:35)   письмо автору
 
   для: Reша   (15.02.2007 в 12:19)
 


CREATE TABLE tbl(
       id INT(11) NOT NULL AUTO_INCREMENT,
       id_parent INT(11), 
       `name`  TEXT,

       PRIMARY KEY  (id),
       INDEX par_ind (id_parent),
       FOREIGN KEY (id_parent) REFERENCES tbl(id) ON DELETE CASCADE
) TYPE=INNODB;

   
 
 автор: Reша   (15.02.2007 в 12:50)   письмо автору
 
   для: Trianon   (15.02.2007 в 12:35)
 

Круть ;) (сорри за молодёжный слэнг, но другое достойное слово только из могучего русского)

Спасибо :)

   
 
 автор: Trianon   (15.02.2007 в 12:17)   письмо автору
 
   для: Reша   (15.02.2007 в 11:46)
 

Вам их именно удалить нужно?

   
 
 автор: Reша   (15.02.2007 в 12:18)   письмо автору
 
   для: Trianon   (15.02.2007 в 12:17)
 

Да, в других действиях необходимости нет.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования