Ik ben hier bezig met een webshop-achtig project in ASP en MSSQL. De situatie is als volgt:
* er is een tabel products, en elk product is gelinked aan een categorie (dmv een catid veld in de tabel zelf)
* er is een tabel categories, en die heeft een FK naar zichzelf, oftewel: een categorie heeft een parent-cat-id.
De categorie-structuur krijgen we aangeleverd, en het vervelende is dat in een hoofdcategorie (met als parent-cat-id 1) soms direct de eind-categorieen zitten (de categorieen waar producten naar verwijzen), maar in de andere gevallen zitten er nog 1 of meer categorieen tussen, voor een eindcategorie is bereikt.
Even schematisch:
Nu is de wens, dat er vanuit elk niveau gezocht kan worden in alle producten uit alle categorieen die daaronder hangen. Dus stel, ik zit in de categorie 'software', dan moet ik dus zoeken naar producten met cat-id 8, 9, 10 of 11.
Dit zou geen probleem moeten zijn als je te maken hebt met een vast aantal niveau's, maar het probleem is nu dus dat je niet weet hoeveel categorieen diep je moet zoeken.
Nu is mijn vraag hoe ik dit aan zou moeten pakken: ontkom je niet aan recursiviteit (zo ja, hoe?), of heeft MSSQL hier een oplossing voor? Ik meen me te herinneren dat Oracle een dergelijke mogelijkheid had om nested records te kunnen doorzoeken namelijk; wellicht dat MSSQL dat ook heeft? Ik ben al stug aan het zoeken geweest op MSDN, maar ik zie zo 1-2-3 niet iets wat van toepassing zou kunnen zijn.
* er is een tabel products, en elk product is gelinked aan een categorie (dmv een catid veld in de tabel zelf)
* er is een tabel categories, en die heeft een FK naar zichzelf, oftewel: een categorie heeft een parent-cat-id.
De categorie-structuur krijgen we aangeleverd, en het vervelende is dat in een hoofdcategorie (met als parent-cat-id 1) soms direct de eind-categorieen zitten (de categorieen waar producten naar verwijzen), maar in de andere gevallen zitten er nog 1 of meer categorieen tussen, voor een eindcategorie is bereikt.
Even schematisch:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| 1 Root
2 Digitale camera's
* Canon Digital Ixus
* Nikon 4300
3 Monitoren
4 CRT
* Dell 21'' bla
* Viewsonic 19'' melp
5 TFT
* acer 17'' woei
* hp 15'' knel
6 Software
7 Besturingssystemen
8 Workstation OS
* Windows XP
9 Network OS
* Novell 6.5
10 Server OS
* Windows server 2003
11 Grafische software
* Adobe Photoshop |
Nu is de wens, dat er vanuit elk niveau gezocht kan worden in alle producten uit alle categorieen die daaronder hangen. Dus stel, ik zit in de categorie 'software', dan moet ik dus zoeken naar producten met cat-id 8, 9, 10 of 11.
Dit zou geen probleem moeten zijn als je te maken hebt met een vast aantal niveau's, maar het probleem is nu dus dat je niet weet hoeveel categorieen diep je moet zoeken.
Nu is mijn vraag hoe ik dit aan zou moeten pakken: ontkom je niet aan recursiviteit (zo ja, hoe?), of heeft MSSQL hier een oplossing voor? Ik meen me te herinneren dat Oracle een dergelijke mogelijkheid had om nested records te kunnen doorzoeken namelijk; wellicht dat MSSQL dat ook heeft? Ik ben al stug aan het zoeken geweest op MSDN, maar ik zie zo 1-2-3 niet iets wat van toepassing zou kunnen zijn.
[ Voor 3% gewijzigd door Pelle op 19-03-2004 09:40 ]