AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein [PHP] Datensätze als Baum darstellen
Thema durchsuchen
Ansicht
Themen-Optionen

[PHP] Datensätze als Baum darstellen

Ein Thema von Matze · begonnen am 19. Feb 2008 · letzter Beitrag vom 3. Mär 2008
Antwort Antwort
Seite 3 von 4     123 4      
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#21

Re: [PHP] Datensätze als Baum darstellen

  Alt 20. Feb 2008, 16:23
Ah super, danke.
  Mit Zitat antworten Zitat
Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#22

Re: [PHP] Datensätze als Baum darstellen

  Alt 20. Feb 2008, 16:51
Noch ne kleine Änderung um die Durchlaufzeit zu optimieren

Code:
// rekursives füllen eines Trees aus einer Datenmenge
// die & vor den variablen sind Zeigerangaben, damit auch
// rauskommt was gewünscht wird
function filltree(&$node, $ds, $id=0) {
  // Datenmenge durchgehen (Tree-Root ist 0)
  foreach ($ds as $key=>$data) {
    // Wenn der parent mit der ID der zu füllenden Node übereinstimmt
    // eine Subnode erstellen
    if ($data["parent"] == $id) {
      // Zuordnung von Nutzdaten zu ID
      $node[$data["id"]] = array("text" => $data["text"], "data" => $data["data"]);
      // eingetragenes Node aus der Datenmenge entfernen
      unset($ds[$key]);
      // rekursiv füllen
      $ds = filltree($node[$data["id"]]["childs"], $ds, $data["id"]);
      // wenn es doch keine Kinder gab, den "childs"-Unterpunkt
      // wieder entfernen
      if (count($node[$data["id"]]["childs"]) == 0) { 
        unset($node[$data["id"]]["childs"]);
      }
    }
  }

  return $ds;
}
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#23

Re: [PHP] Datensätze als Baum darstellen

  Alt 20. Feb 2008, 17:13
Öhm was habe ich davon, wenn ich $ds zurückgebe?
Das neue Array wird doch über &$node zurückgegeben, das andere interessiert mich eigentlich nicht, denn das habe ich davor ja auch schon, sonst könnte ich es nicht übergeben.
  Mit Zitat antworten Zitat
Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#24

Re: [PHP] Datensätze als Baum darstellen

  Alt 20. Feb 2008, 17:23
Aus $ds fliegen in der Rekursion weitere Datensätze, was dieses Tabellen-Array weiter kürzt und die Durchlaufzeit verringert. Die Rückgabe ist im Grunde nur für die Rekursion gut. Man könnt noch ne Prüfung auf $id != 0 vorsetzen
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#25

Re: [PHP] Datensätze als Baum darstellen

  Alt 20. Feb 2008, 17:36
Achso stimmt!
Danke. irgendwann muss ich mir das mal ganz genau ansehen, denn die Rekursion macht mir doch jedesmal neu zu schaffen, auch wenn diese im Endeffekt immer ähnlich ist.
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#26

Re: [PHP] Datensätze als Baum darstellen

  Alt 21. Feb 2008, 01:49
Ich habe mich hier auch nochmal dran versucht.

Gruss
Thorsten
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#27

Re: [PHP] Datensätze als Baum darstellen

  Alt 21. Feb 2008, 08:43
Hallo Thorsten,

dankeschön. Dieses "CALL ..." habe ich noch nie verwendet, es klingt jedoch interessant, Abfragen so auslagern zu können. Die SQL-Abfrage scheint sehr komplex zu sein mit temporären Tabellen und ähnlichem. Mir persönlich kommt das ein wenig unsauber vor, doch da ich von dir bisher nur guten Source kenne, wird das schon sinnvoll sein, es so zu machen, auch wenn ich noch nicht alles nachvollziehen kann.
Da das so viele Abfragen sind, würde ich sagen, ist das ganze recht langsam, doch das kann natürlich täuschen. Ich muss das bei Gelegenheit mal ausprobieren, falls ich das zum Laufen bekomme, auch wenn ich denke, dass ich bei der "einfacheren" Version bleibe, da ich deinen Code, selbst wenn ich ihn hundertprozentig verstehen würde, in ein paar Monaten nicht mehr nachvollzehen kann, denke ich.

Aktuell habe ich eine sehr simple "SELECT * FROM ..."-Abfrage, da ich wirklich alles aus der Tabelle benötige.

PS: Ich denke, dein verlinktes Thema wäre nicht schlecht für die Code-Library, zumindest der erste Beitrag. Den 2. könnte ich abtrennen und von der CL aus verlinken, da PHP in der CL weniger gut aufgehoben ist.
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#28

Re: [PHP] Datensätze als Baum darstellen

  Alt 21. Feb 2008, 21:09
Über das CALL wird eine Stored Procedure auf dem Server ausgeführt. In der Prozedur wird die Baumstruktur der einen Tabelle ausgelesen und in der richtigen Reihenfolge ausgegeben.
Das interressante daran ist, das das verarbeiten der Baumstruktur sau schnell geht. Da hier bei jedem Schleifendurchlauf immer alle Elemente einer Baumebene angehängt werden. Bei einer Baumstiefe von 30 wird die Schleife auf dem Server also 30 mal ausgeführt, wieviele Baumelemente vorhanden sind ist dabei fast egal.
Du hast also nach außen nur eine SQL-Anfrage und bekommst einen, egal wie tief auch immer, verschachtelten Baum in einer super kurzen Zeit. Optimaler kannst du eine Baumstruktur nicht aus einer Datenbank ziehen.

Naja, du must das für dich entscheiden.

Gruss
Thorsten
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#29

Re: [PHP] Datensätze als Baum darstellen

  Alt 21. Feb 2008, 22:33
Hallo Thorsten,

das klingt natürlich sehr interessant. Ich werde auf jedenfall versuchen, den Code nachzuvollziehen, denn auf den ersten Blick sah dieser sehr verwirrend aus.
Ich werde das Array übrigens später cachen und nicht jedesmal aus der Datenbank auslesen und neu strukturieren. Folglich spielt die Zeit zum Auslesen keine allzu große Rolle.

Grüße
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#30

Re: [PHP] Datensätze als Baum darstellen

  Alt 2. Mär 2008, 22:05
Hallo,

mich treibt die Rekursion noch in den Wahnsinn.

Wie kann man denn anhand einer ID die übergeordneten Einträge bekommen?

Beispiel:

Code:
Pflanzen
    Löwenzahn
Tiere
    Säugetiere
        Giraffe
        Maus
        Katze
    Vögel
        Adler
Nun gebe ich die ID von "Adler" an eine rekusrive Funktion und zurückgegeben werden sollen dann die Daten von: Vögel, Tiere

Meine Theorie sieht so aus:
Ich gehe rekursiv so lange die Datensätze durch, bis die gegebene ID gefunden wird und dann wird nach dem rekursiven Aufruf (also beim "Zurücklaufen") das zu zurückgebene Array gefüllt.

Nur die Praxis endet entweder in einer Endlosrekursion oder gibt mir etwas komplett falsches aus.

Grüße
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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 02:21 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