id | name | parent_id | created |
1 | Kateg1 | 0 | dátum |
2 | Kateg2 | 1 | dátum |
3 | Kateg3 | 3 | dátum |
Azonban amint több ezer sorunk van a táblában, tehát egy jó nagy webshopot akarunk felépíteni például, akkor erősen gondolkodunk kell az optimalizáláson. Ehhez nem kell mást tennünk, mint még két oszlopot hozzácsapni az eredeti táblázatunkhoz, például lft és rght néven.
id | name | parent_id | lft | rght | created |
1 | Kateg1 | 0 | 1 | 6 | dátum |
2 | Kateg2 | 1 | 2 | 5 | dátum |
3 | Kateg3 | 3 | 3 | 4 | dátum |
A két mező fogja meghatározni, hogy egyes kategóriába mennyi alkategória van, és sokkal egyszerűbb lesz a lekérdezésünk is. Azonban most ebbe nem megyek bele, az eddig legjobb cikk az alábbi linken olvasható angol nyelven, mely ezt a témát boncolgatja emberi nyelven.
Most lássuk akódunkat, mely az eredeti táblánkat átalakítja:
function rebuild_tree($parent, $left) { $right = $left + 1; $result = mysql_query('SELECT parent_id, id FROM studio_webshop_categories WHERE parent_id = "'.$parent.'";'); while ($row = mysql_fetch_array($result)) { $right = rebuild_tree($row['id'], $right); } mysql_query('UPDATE studio_webshop_categories SET lft = '.$left.', rght = '.$right.' WHERE id = "'.$parent.'";'); return $right+1; } rebuild_tree(0, 1) ; //kiadjuk a parancsot a fa újraépítésére