PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kundenbaum darstellen



tybalt0125
21-09-2006, 10:01
Hallo Forum,

ich arbeite gerade an einem Projekt und nun muss ich sowas wie einen Kundenbaum darstellen. Ich hoffe Ihr könnt mir irgendwie einen Tip geben, wie ich das am Besten implementieren kann.

Und zwar habe ich in der Datenbank eine
Tabelle Verkauf = (id, prev, kundenid, bestellt)
wobei prev immer die kundenid des vorherigen Kunden ist.
Für den "rootkunden" steht in prev NULL.

Wie kann ich nun die ganzen Kunden und Unterkunden darstellen und dies am leichtesten implementieren?

Aussehen sollte es ca. wie auf dem Bild im Anhang.

Ich hoffe auf eure Hilfe. Danke im voraus.

Tybalt0125

Peltfrog
21-09-2006, 11:08
Moin,

also auf anhieb fällt mir dazu das Schlagwort Nested Set ein. Schau mal [hier (http://www.klempert.de/nested_sets/demo/)]. Evtl. ist das was für Dich. Wobei ich Dir da weder Vor- noch Nachteile nennen kann.

Viele Grüße

tybalt0125
21-09-2006, 11:31
Moin,

also auf anhieb fällt mir dazu das Schlagwort Nested Set ein. Schau mal [hier (http://www.klempert.de/nested_sets/demo/)]. Evtl. ist das was für Dich. Wobei ich Dir da weder Vor- noch Nachteile nennen kann.

Viele Grüße
Danke für den Link, ich werde mir das gleich genauer anschauen, aber so wie ich auf den ersten Blick gesehen habe, scheint das nicht das richtig für mich zu sein.

Die Datenbankstruktur ist mir (fast) unwichtig, ich frage mich nur, wie ich das mit PHP am besten darstellen kann, ähnlich wie in dem Anhang.

Peltfrog
21-09-2006, 11:46
Auf der Testseite ist es als Verzeichnisbaum aufgebaut. Das kannst Du leicht in Deine funktionen übernehmen. Du bekommst alles über diese Nested Set Klasse. Der Vorteil ist, dass viele (jeder mit Windows PC) sich in Baumstruckturen wie dieser zurecht findet. Ich kann Dir aber nicht sagen wie weit Du diese Strucktur verzweigen kannst. (Also wieviele Subnodes Du erstellen kannst.)

nEox
21-09-2006, 15:02
Hallo tybalt0125,


Die Datenbankstruktur ist mir (fast) unwichtig, ich frage mich nur, wie ich das mit PHP am besten darstellen kann, ähnlich wie in dem Anhang.
Mit der Darstellung meinst du sicherlich die SQL Abfragen und den Zugriff auf die einzelnen Knoten. Das erledigt die Klasse. Ich kenne die oben genannte Klasse nicht, das Konzept löst allerdings genau dein Problem.

Die Einarbeitung in Nested Sets lohnt sich auf jeden Fall da es einmal gelernt sehr hilfreich sein wird.

Alternativ kannst du die Knoten rekursiv durchlaufen, was allerdings Nachteile in der Performance mit sich bringt.

Grüße,
nEox

tybalt0125
21-09-2006, 15:31
Hallo tybalt0125,


Mit der Darstellung meinst du sicherlich die SQL Abfragen und den Zugriff auf die einzelnen Knoten. Das erledigt die Klasse. Ich kenne die oben genannte Klasse nicht, das Konzept löst allerdings genau dein Problem.

Die Einarbeitung in Nested Sets lohnt sich auf jeden Fall da es einmal gelernt sehr hilfreich sein wird.

Alternativ kannst du die Knoten rekursiv durchlaufen, was allerdings Nachteile in der Performance mit sich bringt.

Grüße,
nEox
Nein, genau das meine ich nicht. Ich möchte einfach vorhandene Daten als Baumstruktur darstellen, wie kann ich das mit PHP machen?


id | prev | kundenid | bestellt
1 NULL 2 10
2 1 3 20
3 1 5 30
4 2 10 10
5 2 9 15
6 3 3 10

Diese Daten sind vorhanden.

So soll der Baum aussehen aber dann halt in der Darstellung wie auf dem angehängten Bild im ersten Post:


2
|--3
| |--10
| |--9
|--5
|--3

Es geht mir nicht um die Datenstruktur in der Datenbank, die sollte so bleiben, was ich wissen will, wie ich am Besten den Baum zeichnen kann?!? Ich möchte also nur wissen, wie ich das PHP technisch am Besten im Browser darstellen kann und am Besten wie auf dem Bild.

Oder verstehe ich jetzt alles falsch?

cplinux
22-09-2006, 22:11
Ich denke, das Stichwort heißt hier Rekursion

Das ist nur sehr grob (kam mir gerade in den Sinn), syntaktisch falsch und soll nur veranschaulichen, wie man es machen kann.

for (i=0; i<anzahlkunden; i++) {
zeigeKunden(kundennummer(i));
}

function zeigeKunden(kundennummer) {
zeigeParents(kundennummer);
zeigeChilds(kundennummer);
}

function zeigeChilds(kundennummer) {
zeigeChildDaten();
if (child has children) {
zeigeChilds(children);
}
}

Gruß
cplinux