ho una tabella ...
codice:
CREATE TABLE IF NOT EXISTS `categories` (
  `categories_id` int(11) NOT NULL auto_increment,
  `name` varchar(64) default NULL,
  `parent_id` int(11) NOT NULL default '0',
  PRIMARY KEY  (`categories_id`),
  KEY `idx_categories_parent_id` (`parent_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=22 ;

--
-- Dump dei dati per la tabella `categories`
--

INSERT INTO `categories` (`categories_id`, `name`, `parent_id`) VALUES
(1, 'cat_A', 0),
(2, 'cat_B', 0),
(4, 'sub_cat_A_1', 1),
(5, 'sub_cat_A_2', 1),
(6, 'sub_cat_A_3', 1),
(7, 'sub_cat_A_4', 1),
(8, 'sub_cat_A_5', 1),
(9, 'sub_cat_A_6', 1),
(21, 'sub_sub_cat_A_7_1', 17),
(16, 'sub_sub_cat_A_3_1', 6),
(17, 'sub_cat_A_7', 1),
(18, 'sub_cat_B', 2),
(19, 'sub_sub_cat_A_5_1', 8),
(20, 'sub_cat_B', 2);
il campo parent_id collega il "figlio" col "padre"...
se ci fosse solo il padre ci sarei riuscito aggeggiando con gli array
siccome ci possono essere anche "nonno" , bis e tris....
ci vorrebbe qlc di ricorsivo... ma non so come...
il risultato finale dovrebbe essere:
cat_A
cat_B
cat_A-sub_cat_A_1
cat_A-sub_cat_A_2
cat_A-sub_cat_A_3
cat_A-sub_cat_A_4
cat_A-sub_cat_A_5
cat_A-sub_cat_A_6
cat_A-sub_cat_A_7-sub_sub_cat_A_7_1
cat_A-sub_cat_A_3-sub_sub_cat_A_3_1
cat_A-sub_cat_A_7
cat_B-sub_cat_B
cat_A-sub_cat_A_5-sub_sub_cat_A_5_1
cat_B-sub_cat_B

grazie....