Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi [SQL] Baumstruktur bzw. Teilbaum löschen? (https://www.delphipraxis.net/144199-%5Bsql%5D-baumstruktur-bzw-teilbaum-loeschen.html)

Grolle 2. Dez 2009 11:24

Datenbank: MySQL • Version: % • Zugriff über: UniDac

[SQL] Baumstruktur bzw. Teilbaum löschen?
 
Hallo,

ich möchte gerne in meinem Baum, den ich mir aus der Datenbank hole Knoten löschen. Bisher sieht mein Ansatz dazu so aus:
SQL-Code:
DELETE FROM icstree WHERE id = :id OR parent = :id
Die Tabelle sieht vereinfacht so aus: | id | parent | name | level |
Mein Problem ist jetzt: Wie gehe ich in die Tiefe? Mit dem obigen Code lösche ich ja nur einen Knoten mit seinen Unterknoten. Ich will aber auch die Unterknoten von den Unterknoten usw... löschen. Geht das überhaupt mit einer SQL-Abfrage?

Viele Grüße ...

sirius 2. Dez 2009 11:40

Re: [SQL] Baumstruktur bzw. Teilbaum löschen?
 
Was genau meinst du?

Also mit Fremdschlüsseln kann man kaskadierend löschen.

Grolle 2. Dez 2009 11:48

Re: [SQL] Baumstruktur bzw. Teilbaum löschen?
 
Hi,

Beispiel:

K1
K2
|--K16
|--K18
|--K19
----|--K34
----|--K46
K3
K5

Jetz möchte ich K2 löschen und zwar mit allen Unterknoten. Mit meinem SQL erreiche ich aber nur K2,K16,K18 und K19. K34 und K46 bleiben als Leichen in der Datenbank (Diese haben ja als Parent K19). Diese will ich aber auch erreichen.

Viele Grüße ...

himitsu 2. Dez 2009 11:50

Re: [SQL] Baumstruktur bzw. Teilbaum löschen?
 
er braucht praktisch etwas wie
SQL-Code:
DELETE FROM icstree WHERE id = :id OR parent = _ID_eins_der_gelöschten_Einträge_

Grolle 2. Dez 2009 11:51

Re: [SQL] Baumstruktur bzw. Teilbaum löschen?
 
Zitat:

Zitat von himitsu
er braucht praktisch etwas wie
SQL-Code:
DELETE FROM icstree WHERE id = :id OR parent = _ID_eins_der_gelöschten_Einträge_

jau

borwin 2. Dez 2009 12:13

Re: [SQL] Baumstruktur bzw. Teilbaum löschen?
 
Ich weiss nicht ob MySQL das kann, aber ich würde einen Foreign Key von parent auf ID legen mit der option Delete Cascade und Update Cascade.
Damit referenziert der Foreign Key auf sich selber. Löscht Du jetzt einen Eintrag werden alle abhängigen Datensätze gelöscht, bis zum letzten Zweig.
Ein zusätzlicher Efekt ist auch, dass die Referenz zum Parent geprüft wird beim Insert. So hast bekommst Du Keine "blinden" Einträge.

Gruß Borwin

sirius 2. Dez 2009 12:29

Re: [SQL] Baumstruktur bzw. Teilbaum löschen?
 
Zitat:

Zitat von borwin
Ich weiss nicht ob MySQL das kann, aber ich würde einen Foreign Key von parent auf ID legen

Ich hätte nie gedacht, dass es geht einen Fremdschlüssel auf die eigene Tabelle zu legen, aber zumindest Oracle kann das :spin:

Grolle 2. Dez 2009 12:35

Re: [SQL] Baumstruktur bzw. Teilbaum löschen?
 
Hallo,

MySql kann Foreign Keys wohl nur mit InnoDB. Meine Datenbank ist MyISAM. Weitere Vorschläge, die mich vorm durchiterieren durch den Teilbaum bewahren?

Viele Grüße ...

borwin 2. Dez 2009 12:36

Re: [SQL] Baumstruktur bzw. Teilbaum löschen?
 
Zitat:

Ich hätte nie gedacht, dass es geht einen Fremdschlüssel auf die eigene Tabelle zu legen, aber zumindest Oracle kann das :spin:
Firebird und Interbase kann das auch.

mkinzler 2. Dez 2009 12:37

Re: [SQL] Baumstruktur bzw. Teilbaum löschen?
 
Das sollte jedes ordentliche DBMS können


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:08 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz