Autor Zpráva
Ivorius
Profil
Používám traverzování kolem stromu (MPTT) http://php.vrana.cz/traverzovani-kolem-stromu-prakticky.php

Potřeboval bych nějak jednoduše všechny prvky v jednotlivých větvích uspořádat dle abecedy. Tedy přiřadit jim nově lft a rgt podle abecedy.

Řešil někdo tento problém a mohl by mi pomoci? Alespoň naznačit postup. Díky
tiso
Profil
Ivorius - na takýto spôsob radenia práve nie je tento typ ukladania stavaný...
Ivorius
Profil
To já vím, ale mám data v databázi a stačí mi jen jednou spustit skript, který by ty data v jednotlivých větvích seřadil a nastavil jim nové lft a rgt.
Ivorius
Profil
Jinak krom lft a rgt používám také doplňující informaci o hloubce (zanoření)
tiso
Profil
Ivorius - napadá mi hrubá sila:
1. zobrať všetky linky level1, zoradiť ich podľa abecedy a pridať im tmp_lft a tmp_rgt (tmp tabuľka)
2. pre každý link z level1 zobrať všetky linky level2, zoradiť ich podľa abecedy a pridať ich tmp_lft a tmp_rgt, zmeniť tmp_lft a tmp_rgt pre nadradený level
3. opakovať bod 2 pre hlbšie vnorené levely.

Ale programovať by som to nechcel :-)
Ivorius
Profil
Tak to si mě nepotěšil :) No zkusím prvně zacyklit přesouvání větví podle seřazeného pole a uvidím.
tiso
Profil
Ivorius - keď tak nad tým dnes premýšľam, tak by to mohlo ísť takto:
1. vyberieš všetky nody zoradené podľa levelu, abecedy
2. ku každému uzlu vyrátaš počet detí (rgt-lft-1)/2 a orientačné poradie (len increment cez cyklus)

3. vyberieš všetky nody level1 zoradené abecedy
4. pre každý takýto parent nod vyberieš jeho deti (level+1, lft>lft_parent, rgt<rgt_parent) zoradené podľa orientačného poradia
5. zapamätáš si lft a rgt parent uzlu a priradíš mu nové hodnoty rgt a lft (lft=lft_last+1, rgt=lft+2*child_count+1)
6. opakuješ 4-5 pre hlbšie vnorené levely

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: