Üdv!
PHP-ban szereték egy fa struktúrát bejárni és megjeleníteni. Mezők az adatbázisban: id,name,parent_id.
egyszerű példa:
1,Computers,-
2,HP,1
3,IBM,1
4,Acer,1
5,HP Laptops,2
6,HP Desktops,2
Valami ilyesmit kellene látni:
- Computers
- HP
- HP Laptops
- HP Desktops
- IBM
- Acer
- HP
A PHP iterators-nál nézelődtem, de nem tűnt használhatónak.
Van ötlete valakinek mivel tudnám bejárni a fát, hogy megjelenítsem?
- 2174 megtekintés
Hozzászólások
rekurziv fuggvennyel?
- A hozzászóláshoz be kell jelentkezni
Talán először egy SQL-el fel kell töltenem pl. egy tömböt. Aztán a fa ágait végigjárni valahogy.
Nem tudom mi lenne a gyors, szép megoldás.
- A hozzászóláshoz be kell jelentkezni
Kb. ennyi lenne koncepcionálisan:
print_node(parent) {
$query=select id,name from table where parent_id=parent;
foreach $query {
print name;
print_node(id);
}
}
main() {
print_node(1);
}
- A hozzászóláshoz be kell jelentkezni
Atyauristen, kulon query minden elemnek?!
Kerdezo, a problema trivialis, rengeteget fejlodnel ha magad oldanad meg!
----------------------
"ONE OF THESE DAYS I'M GOING TO CUT YOU INTO LITTLE PIECES!!!$E$%#$#%^*^"
--> YouTube csatornám
- A hozzászóláshoz be kell jelentkezni
Ennyi, én ezt csak kiindulásnak írtam ide.
- A hozzászóláshoz be kell jelentkezni
Többfélképpen meg lehet oldani, biztos. Egy egyszerű megoldást kerestem.
Első körben arra gondoltam, hogy a parent node-okat keresem ki (parent_id=null)... stb.
De köszönöm az ötleteket!
- A hozzászóláshoz be kell jelentkezni
DB-specifikus módszerrel. Google: hierarchical query
- A hozzászóláshoz be kell jelentkezni
[Törölve]
- A hozzászóláshoz be kell jelentkezni
ha lehet módosítani a db sémán, akkor én nested set módszerrel próbálkoznék ( http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/ )
- A hozzászóláshoz be kell jelentkezni
köszönöm!
- A hozzászóláshoz be kell jelentkezni
My 2 cents:
Első lépés: adatbázistól és a lekérdezés-típusától függően egy-két keresés:
MySQL - nested set, ha többnyire lekérdezni fogod és viszonylag ritkán kell új elemet felvinni. Játszhatsz indexekkel és szöveges mezőkkel olyasmit, mint a PostgreSQL-es ltree, ha mindig csak subtree keresést akarsz csinálni (egy csomó művelet viszont PITA így).
PostgreSQL - ltree
Innentől kezdve, ha ez rendben van, egy lekérdezéssel le tudsz kérni teljes részfákat. Ha van ltree-d (tehát tudsz pl. kategória + szint szerint rendezni), akkor egy sima egymásba ágyazott listát elő tudsz állítani a rekordok beolvasása közben. Ha nincs, akkor behúzod a teljes adathalmazt, a memóriában előállítod a fát, és bejárod. PHP-nál nagyjából adja magát a "gyerekek" reprezentáció, vagyis minden nem-leaf node-ra tárolod egy tömbben a gyerekeinek az azonosítóját.
Ha mindenképp össze akarod kötni az SPL-es iterátorokkal, akkor: http://php.net/manual/en/class.recursiveiterator.php
BlackY
--
"en is amikor bejovok dolgozni, nem egy pc-t [..] kapcsolok be, hanem a mainframe-et..." (sj)
- A hozzászóláshoz be kell jelentkezni
megnézem ezt is, kösz!
- A hozzászóláshoz be kell jelentkezni
Saját rekurzív függvény/eljárás SQL-ben ami a kívánt html outputtal tér vissza. Ezzel elkerülöd a PHP-ból történő újabb és újabb SQL hívásokat, illetve a meglévő db struktúrát sem kell átvariálni.
- A hozzászóláshoz be kell jelentkezni
Ez egy elég rossz ötlet: nem jó dolog keverni az adatelérést és a megjelenítést.
Miért nem lehet az összes adatot átlapátolni PHP-ba, és ott bejárni a fát? Ez azért nem űrtechnika...
Fuszenecker Róbert
- A hozzászóláshoz be kell jelentkezni
+1
- A hozzászóláshoz be kell jelentkezni
+2
--------------------------------
last project: www.ekaer-feladas.hu
- A hozzászóláshoz be kell jelentkezni