Autor Beitrag
stoermi
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 27.04.06 14:37 
Hallo!
Ich habe folgendes Problem:
eine Tabelle in der Form:

element | parent | value
-----------------------------

Jetzte möchte ich eine Abfrage per SQL machen, die mir bei gegebenem 'parent' alle 'elemente' liefert, sowie deren Kinder, und deren Kinder, usw.

Wie kann ich das bestmöglich realisieren? Danke für eure Tipps!!!

mfg

Ein Unwissender
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Do 27.04.06 14:56 
Mit einem normalen Query wird das wohl nicht gehen. Wäre ein Fall für eine SP. Was für eine Datenbank wird eingesetzt?

_________________
Markus Kinzler.
Dominique
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 92



BeitragVerfasst: Mo 08.05.06 14:21 
Eine Ausgabe des Gesamtbaums, bestimmung der Tiefe, etc. per SQL ist in diesem Tabellen-Modell (Vater-Zeiger) nicht möglich! Es gibt eine weitere Möglichkeit Bäume in Tabellen zu packen: Nested Set Modell
- ist aber wesentlich schwerer zu füllen, Löschen und verschieben ist im Nested-Set-Modell auch nicht ohne...

Ich nutze für Bäume überwiegend Vater-Zeiger und lese den Baum dann in einer rekursiven Funktion. Bei einer geringen Tiefe (bis zu 10 Ebenen) klappt das bisher ganz gut. Der Nachteil ist, daß ich für jeden neuen Funktionsaufruf einen neue Query erzeuge.

Viel Erfolg,
Dominique
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 08.05.06 21:32 
mit welcher datenbank arbeitest du? mit oracle, gibts glaub ich seit ora6 da einen sql befehl, mit dem du genau das machen kannst was du beschrieben hast.
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Mo 08.05.06 22:15 
Mit SQL-2005 (mit 2000 habe ich es noch nicht probiert) kann man eine Tabellenvariable definieren (mit einem select auf deine Tabelle), auf die rekursiv Bezug genommen wird. Nachzulesen bei www.sqlcentral.com, irgendwo in den Archiven (Stichwort: Recursive Query).

_________________
Na denn, dann. Bis dann, denn.