Mailinglisten-Archive |
Hi Benjamin, > ich habe 2 Tabellen mit folgendem Aufbau: > kategorien > +----+-------------+--------+ > | id | name | parent | > +----+-------------+--------+ > | 1 | Briefmarken | 0 | > | 2 | Inland | 1 | > | 3 | Ausland | 1 | > | 4 | bis 1950 | 2 | > | 5 | bis 1980 | 2 | > +----+-------------+--------+ > artikel > +----+-------------+----------+ > | id | name | kategorie| > +----+-------------+----------+ > | 1 | Test1 | 4 | > | 2 | Test2 | 4 | > | 3 | Test3 | 5 | > | 4 | Test4 | 3 | > +----+-------------+----------+ > 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): > > SELECT artikel.id, artikel.name > FROM artikel, kategorien > WHERE artikel.kategorie=kategorien.id AND kategorien.parent=1 Tja, solange es noch keine DB gibt, die Rekursionen selbsttätig auflösen kann, musst du dir da selbst helfen... 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. Gruß Jan --- *** Weitere Infos zur Mailingliste und MySQL unter http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive