[sql] nested parent-child structuur

Pagina: 1
Acties:

  • oogapp0ltje
  • Registratie: Januari 2001
  • Niet online
Ik wil een categorieweergave systeem programmeren, deze categorien zijn met elkaar verbonden in een parent/child structuur.

de tabel die ik denk te gaan gebruiken ziet er als volgt uit:
code:
1
2
3
4
5
6
Field     Type               Key     Default   Extra          

 ---------  -----------  -------  ------  ----------  -------------- 
 cat_id     int(8)             PRI     (null)     auto_increment 
 naam      varchar(50)    YES    (null)                     
 parent_id int(8)                        0

parent_id verwijst naar een bestaande categorie in cat_id tenzij deze gelijk is aan 0

stel dat ik de volgende recordstructuur heb:
code:
1
2
3
4
5
6
7
8
9
10
11
- 1. Fiets
    - 2. Wiel
       - 3. Wielframe
           - 4. Spaken
          -  4. Ventiel
    - 2. Stuur
       - 3. Handvat
       - 3. Bel
       - 3. Handrem

(het getal representeerd het niveau in de boomstructuur)
dan is het voorzover ik weet mogelijk om met 1 SQL statement alle records van 1 niveau te selecteren (...where parent_id = cat_id).

Ik vraag me af of het mogelijk is om in mySQL in een keer alle niveaus te selecteren met een statement. Natuurlijk kan ik dit in mijn applicatielaag afhandelen met een iteratie, maar het lijkt me veel leuker dit te laten met een enkel SQL statement :P

| To acknowledge what is known as known and what is not known as known is knowledge. |


  • Icelus
  • Registratie: Januari 2004
  • Niet online
Dat is mogelijk.

Een betere methode kun je hier vinden.
Of zoek op Joe Celko sql trees.

[ Voor 3% gewijzigd door Icelus op 14-02-2005 20:45 ]

Developer Accused Of Unreadable Code Refuses To Comment


Verwijderd

Of die methode van Kevin Yank nou zoveel beter is, durf ik te betwijfelen.
OK, je kunt sneller de children van een bepaalde node ophalen, maar wanneer je een child wil tussenvoegen, moeten de Lft en Rgt waardes van alle daarop volgende children worden geupdate.
Niet zo'n ramp bij statische data, maar een gebruiker wordt niet echt blij wanneer 'ie 5 minuten moet wachten omdat 'ie alleen maar een ventieldopje heeft toegevoegd... :)

Maar zonder dit soort constructies is 't nauwelijks af te vangen in 1 SQL query. Ik zou 't of client side afhandelen (in een leuke objectstructuur), of via een stored procedure. Maar dat laatste gaat bij MySQL nogal lastig.