Autor Zpráva
mackopu
Profil
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');
a potřebuji z ní vypsat složky do stromové struktury stejně, jako tady.
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 *
Často se to řeší dalšími předpočítanými sloupečky
http://dev.mysql.com/tech-resources/articles/hierarchical-data.html
mackopu
Profil
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
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";

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: