![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подскажите как? [Paradox]
dihlos © (2002-09-03 13:06:00)Здравствуйте!
Имеется БД примерно такой структуры:
ID Name ParentID
1 One 0
2 Two 0
3 Two-1 2
4 Two-2 2
....
т.е она отображает дерево данных:
|- One
|- Two
|- Two-1
|- Two-2
Для удаления Two с его подразделами можно использовать запрос:
DELETE FROM base
WHERE ID=2 AND ParentID=2.
Но как быть если еще у Two-1 или у Two-2 есть "потомки"?, т.е:
...
|- Two-2
|- Two-2-1
|- Two-2-2
|-..... и.т.д..
Ведь в этом случае остаются "мертвые" ссылки.
Подскажите, плиз!
oss (2002-09-03 13:24:00) [1]function deleteTree(id:integer)
begin
...bla-bala...
...bla-bala...
deleteTree(ID)
...bla-bala...
end
NickBat (2002-09-03 13:22:00) [2]Можно попробывать после первого удаления вызвать удаление всех ветвей ParentID которых не существует, кроме 0. Что-то вроде
DELETE FROM base
WHERE ID=2
DELETE FROM base
WHERE PARENTID NOT IN (SELECT ID FROM base) AND ParentId<>0
DiHLoS (2002-09-03 13:11:00) [3]Ну а как примерно?
Леха_ (2002-09-03 13:10:00) [4]обычно это делается с помощью тригеров
а если без них то рекурсивно из программы