AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Alle Kindeskinder(...) virtueller Ordnerstruktur herausfinden
Thema durchsuchen
Ansicht
Themen-Optionen

Alle Kindeskinder(...) virtueller Ordnerstruktur herausfinden

Ein Thema von TheMiller · begonnen am 18. Aug 2010 · letzter Beitrag vom 23. Aug 2010
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#1

Alle Kindeskinder(...) virtueller Ordnerstruktur herausfinden

  Alt 18. Aug 2010, 11:09
Datenbank: FireBird
Hallo,

ich weiß nicht, ob dies hier die richtige Kategorie ist, geschweige denn, ob der Titel aussagekräftig genug ist - falls nicht, gebt bescheid...

Mein Problem ist folgendes:
Ich habe eine TreeView, die beliebig viele Ordner deren beliebig viele Unter(-Unterunter...)Ordner anzeigt.
Die Informationen stammen aus einer Firebird-Datenbank, die wie folgt aufgebaut ist:

Code:
ID | PARENT | TITEL
1  |   -1   | Ein Ordner oberster Ebene
2  |    1   | Ein Unterordner von "Ein Ordner oberster Ebene"
3  |    1   | siehe ID-2
4  |    2   | Ein Unterordner von "Ein Unterordner von "Ein Ordner oberster Ebene""
Nun kann ich wunderbar von "unten nach oben" herausfinden, wohin welche Ordner gehören, welche Väter sie haben und so weiter.

Allerdings kann ich bei diesem Design nicht sagen, welche Einträge alle unterhalb des Ordners mit der ID x zuzuordnen sind.

Ich habe jetzt schon länger überlegt, wie ich eine Möglichkeit erlangen kann zu sagen, dass die Ordner (IDs) 3.4.5...n unterhalb des Ordners 2 stehen.

Könnt ihr mir vielleicht helfen / Tipps geben?

Vielen Dank

Geändert von mkinzler (18. Aug 2010 um 11:13 Uhr) Grund: Datenbank eingetragen
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Alle Kindeskinder(...) virtueller Ordnerstruktur herausfinden

  Alt 18. Aug 2010, 11:11
Warum nicht?
Markus Kinzler
  Mit Zitat antworten Zitat
18. Aug 2010, 11:12
Dieses Thema wurde am "18. Aug 2010, 12:12 Uhr" von "mkinzler" aus dem Forum "Algorithmen, Datenstrukturen und Klassendesign" in das Forum "Datenbanken" verschoben.
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#4

AW: Alle Kindeskinder(...) virtueller Ordnerstruktur herausfinden

  Alt 18. Aug 2010, 11:25
Tja... bei allen Versuchen, die ich getätigt habe, endet das immer darin, dass ich entweder den richtigen SQL-Befehl nicht zu Stande gebracht habe, oder mittels Schleife immer weitere SQL-Befehle ausgeführt habe, bis ich alle Unterordner erwischt habe. Das kann dann mal schnell in vielen SQL-Anfragen enden.

Ich wollte jetzt wissen, ob man hier vielleicht eine nicht-normalisierte Spalte in der Tabelle anlegt (wie es das phpBB auch manchmal macht) und dort die IDs der Unterordner kommasepariert auflistet, die zu dem jeweiligen Ordner gehören.

Tipps dieser Art wollte ich mal erfragen. Bin ja nicht der erste, der das vorhat - aber irgendwie ideen bzw. ratlos.

Vielen Dank
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#5

AW: Alle Kindeskinder(...) virtueller Ordnerstruktur herausfinden

  Alt 18. Aug 2010, 11:51
Was für eine Datenbank verwendest Du, der SQL-Server z.B. steigt bei 32 Rekusionen aus.
Vielleicht in der Art.

SQL-Code:
Declare @Parent int
Declare @count int
Select @Parent=14

Select cast(ID as Int) as ID
into #tmp
from Tabelle where ParentID=@Parent

select @Count=0
While @Count<(Select Count(*) from #tmp)
   begin
   Select @Count=(Select Count(*) from #tmp)
   insert into #tmp Select Cast(ID as int) from Tabelle where ParentID in (Select ID from #tmp) and ID not in (Select ID from #tmp)
   end
Select * from #tmp
Drop table #tmp
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)

Geändert von mkinzler (18. Aug 2010 um 12:20 Uhr) Grund: SQL-Tag eingefügt
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Alle Kindeskinder(...) virtueller Ordnerstruktur herausfinden

  Alt 18. Aug 2010, 12:20
Zitat:
Was für eine Datenbank verwendest Du, der SQL-Server z.B. steigt bei 32 Rekusionen aus.
Siehe 1. Beitrag.

In FireBird kann man hierfür auch eine CTE nehmen
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#7

AW: Alle Kindeskinder(...) virtueller Ordnerstruktur herausfinden

  Alt 18. Aug 2010, 12:30
Sorry habe ich überlesen.......
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#8

AW: Alle Kindeskinder(...) virtueller Ordnerstruktur herausfinden

  Alt 18. Aug 2010, 14:19
Hallo,

ja, ich nutze die Firebird-Embedded-Version (2.0). Was ist eine CTE?

Danke
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Alle Kindeskinder(...) virtueller Ordnerstruktur herausfinden

  Alt 18. Aug 2010, 14:29
CTE: Common Table Extension

Hier ein Beispiel einer rekursiven CTE

SQL-Code:
with recursive ordner as
    ( select * from <Tabelle> order by parent)
select
    *
from
    <Tabelle> t
       join ordner O on t.parent = O.id;
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#10

AW: Alle Kindeskinder(...) virtueller Ordnerstruktur herausfinden

  Alt 18. Aug 2010, 14:35
Wow. Danke.

Davon habe ich noch nie etwas gehört. Bin leider nicht zu Hause, sodass ich es nicht testen kann. Aber über die Theorie/Praxis habe ich mir schon gedanken gemacht. Was ist perfomanter und "unbeschränkter"?

Gibt es ein Rekursionslimit bei der CTE? Wäre es nicht schneller, wenn ich die IDs der Kinder in eine unnormalisierte Spalte schreibe?

Das sind meine Fragen dazu, die mir gerade gekommen sind.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:25 Uhr.
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