phpbar.de logo

Mailinglisten-Archive

Tree-Select (war Re: SELECT)
Archiv Mailingliste mysql-de

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Tree-Select (war Re: SELECT)



Hi Jan, hi Benjamin

Jan Kunzmann wrote:
> Hi Benjamin,
> > Ich möchte alle Artikel aus allen Kategorien unterhalb
> > Kategorie 1 anzeigen lassen.
> > Irgendwie sitze ich aber auf der Leitung und komme nicht
> > weiter als zur 2. Ebene (Kategorie 2 und 3):
> Tja, solange es noch keine DB gibt, die Rekursionen selbsttätig auflösen
> kann, musst du dir da selbst helfen...

Oups, die gibt's schon. Zumindest Oracle bietet eine Tree-Funktion. Da
kann man dann den Beginn angeben und der Baum wird nach unten (bzw auch
nach oben) aufgelöst. Mit Zusatzvariablen kann man sogar die Ebene und
andere Angaben auslesen. Aber eine Oracle-DB für eine Briefmarken-DB zu
verwenden ist wohl etwas übertrieben... :))


> Ich denke, ich würde der Artikel-Tabelle ein Textfeld spendieren. Dann
> bastelst du etwas Code, der automatisch dieses Feld mit einer
> kommaseparierten Liste der übergeordneten Kategoriern füllt, also so:
> artikel
> +----+-------------+----------+---------+
> | id | name        | kategorie| parents |
> +----+-------------+----------+---------+
> |  1 | Test1       |        4 | 4,2,1   |
> |  2 | Test2       |        4 | 4,2,1   |
> |  3 | Test3       |        5 | 5,2,1   |
> |  4 | Test4       |        3 | 3,1     |
> +----+-------------+----------+---------+
> Dann geht die Abfrage so:
> SELECT id,name FROM artikel WHERE 1 IN parents;
> Sollte die Kategorie-Liste zu viele Knoten haben, dann musst du die
> parents-Referenz wohl in eine Extratabelle packen.

Diese Lösung ist für das vorgegebene Problem sicherlich ausreichend.
Problematisch wird's aber, wenn oft die Kategorien ändern. So ist
nämlich diese Art von Datenarchivierung ziemlich stabig und ungenügend
anpassungsfähig.

Stattdessen würde ich in diesem Fall eine applikatorische Lösung
vorschlagen: Da ziemlich wahrscheinlicherweise sowieso eine
Presentation-Applikation davorsteht, machst du halt ne rekursive
Routine, welche dir jeweils den Baum ausliest. In PHP und Perl ist sowas
relativ einfach zu realisieren.

Trotzdem vielen Dank, Jan, für den guten Hinweis

Grüsse aus der Schweiz,
Johannes

---
*** Weitere Infos zur Mailingliste und MySQL unter http://www.4t2.com/mysql 


Home | Main Index | Thread Index

php::bar PHP Wiki   -   Listenarchive