Autor | Zpráva | ||
---|---|---|---|
mackopu Profil |
#1 · Zasláno: 31. 10. 2008, 14:59:07
Mám tabulku
CREATE TABLE IF NOT EXISTS `slozky` ( `id` int(11) NOT NULL auto_increment, `id_parent` int(11) unsigned NOT NULL default '0', `nazev` varchar(40) NOT NULL, PRIMARY KEY (`id`), KEY `id_parent` (`id_parent`) ); INSERT INTO `slozky` (`id`, `id_parent`, `nazev`) VALUES (1, 0, 'Hlavní složka'), (2, 1, 'Centrálně'), (3, 2, 'Střediska'), (4, 2, 'Partneři'), (7, 1, 'Různé'), (8, 4, 'Smlouvy'), (10, 2, 'Pro všechny'), (13, 7, 'Blbosti'), (12, 3, 'Skripta'), (16, 13, 'Pokus'), (17, 1, 'Grafika'), (18, 16, 'Pokus 2'), (19, 16, 'Pokus 3'); Výpis stromové struktury se provádí javascriptem, který tahá data odtud. Jak docílit stejného výstupu? Tuším, že se na to používá rekurzivní volání funkce, ale nevím jak na to. |
||
Kajman_ Profil * |
#2 · Zasláno: 31. 10. 2008, 15:15:26
Často se to řeší dalšími předpočítanými sloupečky
http://dev.mysql.com/tech-resources/articles/hierarchical-data.html |
||
mackopu Profil |
#3 · Zasláno: 31. 10. 2008, 15:29:46
To není co potřebuji. S rekurzí si poradím - mám funkci
function Tree_Folders_Vypis($id=0,$level=0,$array=array()) { $data =""; if(!count($array)) { $sql="SELECT * FROM slozky ORDER BY nazev"; $result=mysql_query($sql); while($row=mysql_fetch_assoc($result)) { $array[$row['id']]['data']=$row; $array[$row['id_parent']]['childs'][$row['id']]=$row; } } $seperator = ""; for($i=0;$i<$level-1;$i++) { $seperator .= "-"; $data.=$seperator; } $data.=$array[$id]['data']['nazev']; if(count($array[$id]['childs'])) { foreach( $array[$id]['childs'] AS $key => $child ) { // pokud mam childy $data.=Tree_Folders_Vypis($key,$level+1,$array ); } } return $data; }; , která mi vypíše: Hlavní složka -Centrála --Partneři ---Texty --Střediska ---Skripta ... atd, protože o odsazení se postará separátor "-". Jde mi ale o to, jak pomocí této funkce docílit stejného výstupu, ze kterého se tahají data pro ten javascript. |
||
mackopu Profil |
#4 · Zasláno: 31. 10. 2008, 15:32:35
Tedy něco takového:
a[0] = new Array; a[0]['caption'] = "yahoo"; a[0]['children'] = new Array; a[0]['children'][0] = new Array; a[0]['children'][0]['caption'] = "yahoo sports"; a[0]['children'][0]['children'] = new Array; a[0]['children'][0]['children'][0] = new Array; a[0]['children'][0]['children'][0]['caption'] = "baseball"; a[0]['children'][0]['children'][1] = new Array; a[0]['children'][0]['children'][1]['caption'] = "soccer"; a[0]['children'][0]['children'][2] = new Array; a[0]['children'][0]['children'][2]['caption'] = "hockey"; a[0]['children'][1] = new Array; a[0]['children'][1]['caption'] = "yahoo finance"; |
||
Časová prodleva: 15 let
|
0