phpbar.de logo

Mailinglisten-Archive

[php] =?iso-8859-1?Q?Datenbankeintr=E4ge_und_Zuordnungen?=

[php] Datenbankeinträge und Zuordnungen

Michael Metz php_(at)_phpcenter.de
Tue, 2 Apr 2002 13:27:45 +0200


vorab: nein - ich habe keine Möglichkeit ohne HTML zu posten ...

> Ich möchte jetzt auf einer Seite zb. 4 Generationen des ersten Hundes
> ausfindig machen, eigentlich ja kein Problem mit vielen *mysql_query*
> befehlen. aber ich denke mir, da ich bei 4 Generationen 30 Hunde
> hinterher hätte, dauern soviele Abfragen doch recht lange, oder nicht ?
also wir haben das bei uns so geloest, daß wir zusätzlich zur (in deinem
Fall)
Hunde-Tabelle eine zusaetzliche Tabelle angelegt haben, in der
drinnestand, wer
noch alles im Baum unter einem bestimmten Eintrag einsortiert ist.

Beispiel:

1+2 sind Vater und Mutter von 4
3+4 sind Vater und Mutter von 5
5 ist der jüngste Spross

  1    2
   \_/
3   4
 \_/
  5

Nun haben wir dann eine Tabelle angelegt:

idx     parentIdx       grad
5       3               1
5       4               1
5       1               2
5       2               2
4       1               1
4       2               1

Nun kann man einfach einen Select auf Idx 5 machen und bekommt automatisch
alle Vorfahren raus. Wenn
man zusätzlich noch einen Grad einführt, kann man auch die "Entfernung"
der Abstammung ohne weiteres
begrenzen.

Verwande von 789 ersten Grades ist also
SELECT * from <tab-name> WHERE idx=5 AND grad<=1

Die aufgeklappte Tabelle wird zwar schnell groß bei tiefer
Verschachtelung, aber man erspart sich somit viele
einzelne Selects um den Baum "per Hand" durchzugehen. Man muss halt nur
darauf achten, daß man diese Tabelle
immer aktualisiert, sobald sich an der Relation was ändert (was ja hier
nicht passieren sollte) oder ein neuer Eintrag
hinzukommt (was wohl eher der Fall sein wird).

Hoffe, daß ich mich verständlich ausgedrückt habe ;)

MfG
Michael Metz
C&A HV, Orga
Tel.:  +49 (211) 166 2121
Fax.: +49 (211) 166 2152


php::bar PHP Wiki   -   Listenarchive