Tendrías que usar una función recursiva para obtener los hijos de cada menú
probá esto, funciona, y fijate como lo podrías adaptar a tu código    
 Código PHP:
    /*
--
-- Estructura de tabla para la tabla `menu`
--
 
CREATE TABLE IF NOT EXISTS `menu` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `menu_nombre` varchar(25) NOT NULL,
  `id_padre` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;
 
--
-- Volcado de datos para la tabla `menu`
--
 
INSERT INTO `menu` (`id`, `menu_nombre`, `id_padre`) VALUES
(1, 'Home', 0),
(2, 'home1', 1),
(3, 'home2', 1),
(4, 'home3', 1),
(5, 'Productos', 0),
(6, 'productos1', 5),
(7, 'productos2', 5),
(8, 'productos3', 5);
 
*/ 
function con(){
    $conexion=mysql_connect("localhost","root","")or die ('Ha fallado la conexión: '.mysql_error());
    //selección de la base de datos con la que vamos a trabajar
    mysql_select_db("pruebas",$conexion);
    return $conexion;
}
 
 function menu($id_padre=0){
     
    
         $sql = "SELECT * FROM menu WHERE id_padre = $id_padre";     
         $query = mysql_query($sql,con());     
         while($resultado = mysql_fetch_assoc($query)){    
             
             @$menu .=  '<li>'.$resultado['menu_nombre'].'</li>'; //
            @$menu .=menu($resultado['id']); 
             
         }
     
             $menu = '<ul>'.$menu.'</ul>';
            return $menu;
  }
 
$menu = menu();
echo $menu;