![]() |
Datenbank: SQL • Version: - • Zugriff über: -
Hierarchische Daten speichern und abrufen
Hallo,
wie speicher ich am besten hierarchische Daten? z.B. für einen Stammbaum. Mir geht es nicht um das Datenbanksystem sondern wie ich die Struktur am besten aufbaue. Wie speicher ich die Daten so das ich von jedem Datensatz alle "Child" und "Parent" Datensätze abrufen kann. Ich hoffe es versteht jemand wie ich es meine. Gruß EarlyBird |
AW: Hierarchische Daten speichern und abrufen
Hast Du mal XML (statt SQL) in Erwägung gezogen?
|
AW: Hierarchische Daten speichern und abrufen
Kommt leider nicht in Frage.
Zu den Daten kommen noch ein paar mehr Tabellen und Daten hinzu. So das ich es insgesamt gesehen besser mit einer Datenbank lösen kann. Aber Danke für die Anregung. |
AW: Hierarchische Daten speichern und abrufen
Im Grunde brauchst du nur das Elternelement speichern.
Willst du dann die Kinder wissen, mache eine Abfrage wie:
Code:
Wobei du ? durch die ID des Knoten ersetzt, dessen Kinder du wissen willst.
SELECT * FROM nodes WHERE (parent == ?)
|
AW: Hierarchische Daten speichern und abrufen
Hallo,
im grunde sieht die Tabelle dafür so aus
Code:
wenn DU dann noch ne StoredProcedure machen kannst, dann kannst Du die Daten rekursiv ermitteln. ich glaube Holger Klemt hat dazu mal was im Entwickler geschrieben...
CREATE TABLE Tree
(ID INteger, NodeName Char(), Parent_ID INTEGER); Grüße |
AW: Hierarchische Daten speichern und abrufen
Hier würde sich auch eine CTE ( Common Table Expression) anbieten
|
AW: Hierarchische Daten speichern und abrufen
Erstmal Danke für die Antworten.
CTE sagt mir jetzt leider nichts. Werde mich mal mit Google schlau machen. Im Grund ist mir die Tabellen-Struktur schon klar. Nur bin ich mir über die Abfrage der Daten noch nicht im klaren. Ich hatte gehofft das es mit einer bestimmten Tabellen-Struktur einfacher zu lösen ist. Der beste Weg ist also die Daten über eine StoredProcedure rekursiv Abzufragen? |
AW: Hierarchische Daten speichern und abrufen
das habe ich gerade zu CTE gefunden:
![]() Scheint ziemlich genau das zu sein was ich suche.:-D Jetzt muss ich es nur noch genau verstehen und umsetzen. Danke für Eure vorzügliche schnelle Hilfe |
AW: Hierarchische Daten speichern und abrufen
Ich schon wieder.
Für alle die etwas ähnliches suche: Ich habe die Abfrage aus ![]() mal ein bisschen vereinfacht.
Delphi-Quellcode:
So scheint es zu funktionieren.
USE yourDatenbank;
GO WITH Organigramm (Chef, Mitarbeiter, Title, Level) AS ( -- Anchor member definition SELECT e.Chef, e.Mitarbeiter, e.Title, 0 AS Level FROM dbo.myMitarbeiter AS e WHERE e.Chef IS NULL UNION ALL -- Recursive member definition SELECT e.Chef, e.Mitarbeiter, e.Title, Level + 1 FROM dbo.myMitarbeiter AS e INNER JOIN Organigramm AS d ON e.Chef = d.Mitarbeiter ) -- Statement that executes the CTE SELECT Chef, Mitarbeiter, Title, Level FROM Organigramm order BY Level, Chef; GO Der Tip mit CTE war goldrichtig besten Dank noch mal dafür. |
AW: Hierarchische Daten speichern und abrufen
Hallo,
die DB war für Dich ja sekundär. Hier eine schöne Möglichkeit mit Oracle: CONNECT BY PRIOR Beschreibt die Beziehung zwischen Eltern und Kind Datensätzen einer Hierarchie
Code:
Beispiel:
CONNECT BY <child_value> = <parent_value>
Code:
oder
conn hr/hr
SELECT employee_id, last_name, manager_id FROM employees CONNECT BY PRIOR employee_id = manager_id;
Code:
Wenn Du die Hierarchieebenen kennst und die Liste richtig sortiert ist, kommst Du allerdings ohne solche Dinge aus, wenn Du bspw. einen Treeview befüllen willst.
SELECT last_name, employee_id, manager_id, LEVEL
FROM employees START WITH employee_id = 101 CONNECT BY PRIOR employee_id = manager_id; Stored Procedures, das Oracle Beispiel oben oder auch das Beispiel von MS benötigt man vor allem wenn man einen "Ast" oder Ausschnitt benötigt. Hier ein paar mehr Infos zu ![]() |
AW: Hierarchische Daten speichern und abrufen
Danke für den Oracle Tipp.
Mal sehen wie ich damit zurecht komme. Ist von der Syntax ja viel einfacher wie bei MS-SQl |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:51 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 by Thomas Breitkreuz