Momenteel ben ik bezig met het bouwen van een (B2B)-shop. De shop is onderverdeeld in categorieen, en elke categorie heeft een parent-categorie. Is het een hoofdcategorie, dan is de parent als vanzelfsprekend 0.
Door de categorie-id mee te geven aan een functie, wil ik een categorie-boom opbouwen, bijvoorbeeld:
Waarbij alle parent-categorieen klikbaar zijn. De functies die ik daarvoor heb geschreven, zijn deze:
Dit roep je zo aan:
Waarbij $id_parent de id is van de categorie waar je je nu in bevindt. Na een array_reverse ziet hij er zo uit:
Oftewel: een array met daarin in de goeie volgorde, arrays die de id en naam van de parent-cats bevatten.
Er wordt nu alleen wel voor elke categorie apart een query uitgevoerd, en aangezien dit de eerste echte shop is die ik bouw, heb ik geen idee of het normaal is om voor zo'n functionaliteit 4 of 5 of nog wel meer query's uit te gaan voeren. Ik ben er dan ook van overtuigd dat het beter, handiger of sneller kan. En dat is dus ook mijn vraag
Is het wellicht met 1 enkele query op te lossen, of met een ander algoritme zo voor elkaar te boksen dat je niet voor elke parent een nieuwe query uit moet voeren?
Door de categorie-id mee te geven aan een functie, wil ik een categorie-boom opbouwen, bijvoorbeeld:
code:
1
| shop index / compaq / alpha power / alpha servers / alphaserver 1200 |
Waarbij alle parent-categorieen klikbaar zijn. De functies die ik daarvoor heb geschreven, zijn deze:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| <? function getArrayWithParentCats($currentCat) { while ($temp = getParent($currentCat)) { $arrayParentNames[] = $temp; list($key) = each($temp); $currentCat = $key; } return $arrayParentNames; } function getParent($currentCat) { $qParent = mysql_query("SELECT c.parent,p.naam FROM categorieen c,categorieen p WHERE c.id = $currentCat AND c.parent = p.id"); if (mysql_num_rows($qParent) > 0) { $rParent = mysql_fetch_array($qParent); if ($rParent["parent"] > -1) { $arrayParent[$rParent["parent"]] = $rParent["naam"]; return $arrayParent; } else { return false; } } else { return false; } } ?> |
Dit roep je zo aan:
PHP:
1
2
3
| <? $shopTree = getArrayWithParentCats($id_parent); ?> |
Waarbij $id_parent de id is van de categorie waar je je nu in bevindt. Na een array_reverse ziet hij er zo uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| Array
(
[0] => Array
(
[0] => shop index
)
[1] => Array
(
[2] => compaq
)
[2] => Array
(
[5] => alpha power
)
[3] => Array
(
[9] => alpha servers
)
) |
Oftewel: een array met daarin in de goeie volgorde, arrays die de id en naam van de parent-cats bevatten.
Er wordt nu alleen wel voor elke categorie apart een query uitgevoerd, en aangezien dit de eerste echte shop is die ik bouw, heb ik geen idee of het normaal is om voor zo'n functionaliteit 4 of 5 of nog wel meer query's uit te gaan voeren. Ik ben er dan ook van overtuigd dat het beter, handiger of sneller kan. En dat is dus ook mijn vraag
Is het wellicht met 1 enkele query op te lossen, of met een ander algoritme zo voor elkaar te boksen dat je niet voor elke parent een nieuwe query uit moet voeren?