|
|
|
| Есть табличка tbl:
id
id_parent
name
id_parent - это идентификатор записи из той же таблицы, которая является "родителем" этой записи (соответственно, у "корневых" записей id_parent = 0).
Стоит задача - по идентификатору родителя удалить всё дерево его потомков.
Удаление только "детей" по идентификатору ($id) записи просто:
DELETE FROM tbl WHERE id_parent = $id
|
, но мне нужно удалить не только "детей", но и "внуков", "правнуков" и т.д.
Возможна ли реализация без рекурсивного прогона запроса в PHP (там будет до 10 уровней "потомства", соответственно, получится 10 запросов)? Если возможно, то как решить эту задачу средствами MySQL? | |
|
|
|
|
|
|
|
для: Reша
(15.02.2007 в 11:46)
| | Можно решить без рекурсии, если использовать таблицы типа InnoDB и внешние ключи с каскадным удалением. | |
|
|
|
|
|
|
|
для: cheops
(15.02.2007 в 12:15)
| | А можно поподробнее? Видимо, Вы хорошо в этом разбираетесь :) | |
|
|
|
|
|
|
|
для: 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;
|
| |
|
|
|
|
|
|
|
для: Trianon
(15.02.2007 в 12:35)
| | Круть ;) (сорри за молодёжный слэнг, но другое достойное слово только из могучего русского)
Спасибо :) | |
|
|
|
|
|
|
|
для: Reша
(15.02.2007 в 11:46)
| | Вам их именно удалить нужно? | |
|
|
|
|
|
|
|
для: Trianon
(15.02.2007 в 12:17)
| | Да, в других действиях необходимости нет. | |
|
|
|