AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Baumstruktur darstellen

Ein Thema von Monday · begonnen am 1. Okt 2014 · letzter Beitrag vom 2. Okt 2014
 
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#4

AW: Baumstruktur darstellen

  Alt 1. Okt 2014, 15:53
Du solltest die Verknüpfung ID - ParentID (häufig gehört auch noch eine Position für die Reihenfolge dazu) auf jeden Fall in einer separaten DB-Tabelle speichern.
Sonst sperrt eine Verschiebung des Elements im Baum auch alle von der ID direkt oder indirekt abhängigen Datensätze.
Das führt neben dem Geschwindigkeitsproblem auch schnell zum Lockkonflikt.

Tabelle
ID Daten

TabelleBaum
ID ParentID

Für die Ausgabe bietet sich eine rekursive DB-Prozedure an.
Code:
procedure GetTabelleBaum(
  AParentID integer,
  ALevel integer)
returning_values(
  ID integer,
  Level integer)
as
begin
  level = alevel;
  id   = aparentid;
  suspend;

  level = level + 1;
  for select id
  from      TabelleBaum
  where     parentid = :aparentid
  order by  parentid, id
  into     :id
  do begin
    for select id, level
    from      GetTabelleBaum(:id, :level)
    into      :id, :level
    do begin
      suspend;
    end
  end
end
Code:
select    a.level, b.* 
from      GetTabelleBaum(:ARootID, 0) a
left join Tabelle                     b on b.id = a.id
Ein Index über "parentid, id" wäre hier sinnvoll.

Mit Hilfe des Level könnte man ein Treeview füllen oder die Daten einfach nur entsprechend viele Leerzeichen einrücken.
  Mit Zitat antworten Zitat
 


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 23:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz