Zadejte hledaný výraz...

Procházení vícerozměrného pole bez konce

uzivatel1
verified
rating uzivatele
(7 hodnocení)
27. 11. 2014 16:45:11
Ahoj, mám problém s vypsáním menu u kterého dopředu nevím kolik bude mít úrovní. V databázi mám dvě tabulky:
kategorie
kategorie_parent
Po vypsání by mělo menu vypadat takto:
Bohužel pořád nemůžu přijít na to jak menu vypsat když dopředu nevím kolik bude mít úrovní. Už jsem googlil ale stejně to nepomohlo. Jedno řešení jsem našel ale to bych musel překopat databázi.
27. 11. 2014 16:45:11
https://webtrh.cz/diskuse/prochazeni-vicerozmerneho-pole-bez-konce#reply1071991
Jan Stejskal
verified
rating uzivatele
(7 hodnocení)
27. 11. 2014 16:47:59
To co hledáte se jmenuje rekurze.
27. 11. 2014 16:47:59
https://webtrh.cz/diskuse/prochazeni-vicerozmerneho-pole-bez-konce#reply1071990
uzivatel1
verified
rating uzivatele
(7 hodnocení)
27. 11. 2014 16:56:28
Strávil jsem nad tím tolik času a stačilo znát jedno slovo. Děkuji :-)
27. 11. 2014 16:56:28
https://webtrh.cz/diskuse/prochazeni-vicerozmerneho-pole-bez-konce#reply1071989
Jan Matoušek
verified
rating uzivatele
(12 hodnocení)
27. 11. 2014 16:58:26
Pokud máš ještě možnost měnit strukturu, tak bych to řešil:
Tree traversal
nebo
Closure Table
jinak ta rekurze no
27. 11. 2014 16:58:26
https://webtrh.cz/diskuse/prochazeni-vicerozmerneho-pole-bez-konce#reply1071988
Closure table, na kterou odkazuje Jan Matoušek, je nejelegantnější způsob zachycení stromové struktury v relační databázi.
Viz také https://webtrh.cz/264731-struktura-pyramidy-zaznacenim-toho-pozval#4
27. 11. 2014 17:39:19
https://webtrh.cz/diskuse/prochazeni-vicerozmerneho-pole-bez-konce#reply1071987
uzivatel1
verified
rating uzivatele
(7 hodnocení)
4. 12. 2014 09:46:10
Aplikaci jsem se rozhodl tedy na doporučení změnit a použil jsem Closure Table. Narazil jsem ovšem na omezení. Je možné v Closure Table nastavit jednomu potomku více rodičů? Například
4. 12. 2014 09:46:10
https://webtrh.cz/diskuse/prochazeni-vicerozmerneho-pole-bez-konce#reply1071986
Ano, closure table podporuje polyhierarchii.
Prostě prvek s více rodiči do closure table vložte vícekrát, pokaždé na to místo, kde ho chcete mít.
4. 12. 2014 13:08:04
https://webtrh.cz/diskuse/prochazeni-vicerozmerneho-pole-bez-konce#reply1071985
uzivatel1
verified
rating uzivatele
(7 hodnocení)
4. 12. 2014 13:57:37
Existuje v tom případě i nějaký způsob jak se setříděně vypsat (například když chci vypsat celé rozevřené menu)? Při hledání jsem narazil pouze na metodu kdy byla vytvořena další nová tabulka a tam se zapisovala celá cesta.
4. 12. 2014 13:57:37
https://webtrh.cz/diskuse/prochazeni-vicerozmerneho-pole-bez-konce#reply1071984
Nerozumím vaší otázce.
Chcete vypsat celou hierarchii? Zeptejte se na všechny potomky kořenového uzlu (číslo 1).
4. 12. 2014 14:22:40
https://webtrh.cz/diskuse/prochazeni-vicerozmerneho-pole-bez-konce#reply1071983
uzivatel1
verified
rating uzivatele
(7 hodnocení)
4. 12. 2014 15:22:05
Uvedu příklad, to bude nejlepší.
Máme dvě tabulky:
kategorie
kategorie_Strom
Vypsané menu by mělo vypadat takto:
Když vypisuji v php například potomky kategorie 1:
Tak se vypíše:
Kategorie 1
Kategorie 2
Kategorie 2
Kategorie 3
Tudíž nevypíše se mi setříděné. Proto při použití kódu:
Vypadá výsledek takto:
4. 12. 2014 15:22:05
https://webtrh.cz/diskuse/prochazeni-vicerozmerneho-pole-bez-konce#reply1071982
Máte chybně pojmenovaný sloupec, id_kategorie má být předek, nebo ještě lépe anglicky ancestor, descendant, depth.
Seřaďte to přece v tom selectu.
Nevím, jak to přesně chcete řadit, ale tohle by mohlo odpovídat vašemu příkladu
V tabulce vám taky chybí kořenový uzel, pomocí kterého byste mohl vybrat celou hierarchii.
4. 12. 2014 15:58:18
https://webtrh.cz/diskuse/prochazeni-vicerozmerneho-pole-bez-konce#reply1071981
uzivatel1
verified
rating uzivatele
(7 hodnocení)
4. 12. 2014 16:04:04
Napsal Martin Schlemmer;1146957
V tabulce vám taky chybí kořenový uzel, pomocí kterého byste mohl vybrat celou hierarchii.
Toto jsme měl na mysli. Postupoval jsem podle článku: http://blog.voracek.net/databaze/closure-table-stromy-v-mysql-trochu-jinak/
Můžete mě prosím odkázat na článek (nejlépe s ukázkou) kde se řeší i kořenový uzel? Děkuji.
4. 12. 2014 16:04:04
https://webtrh.cz/diskuse/prochazeni-vicerozmerneho-pole-bez-konce#reply1071980
Kořenový uzel v tom článku je, protože hierarchie použitá jako příklad má jednu hlavní kategorii.
Vy můžete vytvořit jednu fiktivní kategorii, kterou umístite úplně na vrchol kategorie. Nebudete ji nikde zobrazovat, ale pomůže vám vybrat celou hierarchii jedním dotazem.
4. 12. 2014 16:27:40
https://webtrh.cz/diskuse/prochazeni-vicerozmerneho-pole-bez-konce#reply1071979
Pro odpověď se přihlašte.
Přihlásit