[MySql] Tree, Graaf opvragen uit db

Pagina: 1
Acties:

  • vinnux
  • Registratie: Maart 2001
  • Niet online
Ik heb één tabel die heet category.
De belangrijkste velden zijn :
id - het unieke id binnen de database (auto_increment)
naam - de naam
parent_id - het id van de catgory waar deze categorie het child van is.

Ik heb hier dus een boom, graaf, geneste categoriën.
cat1
|-cat4
|-cat3
cat 2

Wanneer een categorie geen parent heeft is de parent-id -1
loopen is niet toegestaan.

Nou vraag ik mijzelf af of het met deze structuur mogelijk is om een query te maken die deze boom van boven naar beneden door loopt. in mijn geval dus cat1,cat4,,cat3,cat2

Ik verwacht het van niet, maa ja misschien heb ik het mis.
Misschien iemand een oplossing of een andere oplossing ?

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 13:44
Over dit (interessante) probleem is al eerder een draadje geweest. Zoek 'm eens op, zou ik zeggen.

Verder vermoed ik dat het in dit geval niet kan, omdat je in een enkele query geen criteria kan laten terugslaan op gevonden resultaten.

De meeste boomstructuren worden trouwens al snel breed. Als elke categorie gemiddeld 3 subcategorien heeft, kun je met een diepte van 10 al bijna 60000 categoriën opslaan. Het is dan dus niet zo erg om voor elk nivo een aparte query te doen.

  • Kresh
  • Registratie: Mei 2000
  • Laatst online: 02-03 09:27
heb toevallig laatst ongeveer hetzelfde probleem gehad.
mij is het iig niet gelukt om het met een sql-query te doen.
Vraag nu gewoon alles op met een simpel select-statement, de volgorde etc zet ik nu goed in PHP (en print vervolgens een leuk boompje waarbij je elke tak enzo afzonderlijk kunt showen/hiden)

Verwijderd

"recursion" is het toverwoord

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Misschien is dit wat?
http://www.webgoeroe.net/item/277

Verwijderd

Op zaterdag 18 mei 2002 22:54 schreef Orphix het volgende:
Misschien is dit wat?
http://www.webgoeroe.net/item/277
Dat is idd een zeer interessant artikel, maar d'r staat geen oplossing ;(. Ik vrees idd dat het onmogelijk is om dit zonder trucs rechtstreeks in SQL te doen.

De truc die ik bij dat artikel heb geplaatst (je neemt naast ParentId ook een Path op wat een concatenatie is van alle Parent Id's (dus bijv '1|4|9|33')) maakt het wel mogelijk maar zorgt voor mee overhead...

/Edit: Zie ook
- [topic=290217/1/25]
- [topic=49380/1/50]

/Edit2: tikfout

Wat ik trouwens ook nog wel eens doe is om met één query alle nodes op te vragen, maar door dan te sorteren op ParentId kan je in één loop de hele boom opbouwen :). Dit werkt overigens alleen in een TreeView achtig component, omdat je de nodes niet in volgorde hoeft toe te voegen, het enige wat dan hoeft is dat je de ouder eerst doet...

  • ronaldmathies
  • Registratie: Juni 2001
  • Niet online
[off-topic]

concatetenatie = concatenatie = concatenation

niet als flame bedoel.

[/off-topic]

Ik heb me ook wel eens bezig gehouden met Tree's, alleen het probleem waar jij tegenaanloopt kan niet in SQL opgelost worden, zelf gebruik ik oracle en hiervoor gebruikte ik een Package met een memory tabel. Hierdoor kon ik toch op de backend mijn boomstructuur maken. Alleen MySQL kent voor zover ik weet niet zoiets als packages.

3015 Wp-z 5360 Wp-nno op 2 x SMA-SB3600 TL-21, Warmtepomp: ERSC-VM2CR2 / PUHZ-SHW140 YHA, WTW Q350, EV Kia Ev6 GT-Line

Pagina: 1