Autor | Zpráva | ||
---|---|---|---|
Ivorius Profil |
#1 · Zasláno: 25. 5. 2009, 21:38:18
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 |
#2 · Zasláno: 25. 5. 2009, 21:52:13
Ivorius - na takýto spôsob radenia práve nie je tento typ ukladania stavaný...
|
||
Ivorius Profil |
#3 · Zasláno: 25. 5. 2009, 21:54:41
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 |
#4 · Zasláno: 25. 5. 2009, 21:58:35
Jinak krom lft a rgt používám také doplňující informaci o hloubce (zanoření)
|
||
tiso Profil |
#5 · Zasláno: 25. 5. 2009, 22:12:25
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 |
#6 · Zasláno: 26. 5. 2009, 09:13:50
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 |
#7 · Zasláno: 26. 5. 2009, 11:50:21
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 |
||
Časová prodleva: 15 let
|
0