Tenes toda la razon gnzsoloyo, si algún moderador puede mover el tema al foro de php,
 
Este es el código que utilizo, pero solo funciona cuando $categoria es 0 porque no encuentra resultados con categorías intermedias o finales  
 Código PHP:
    
<?php
$categoria = "0";
$consulta_0 = "SELECT *, COUNT(p.idProducto) FROM productos as p INNER JOIN categorias as c3 ON p.idCat=c3.id 
INNER JOIN categorias as c2 ON c3.id_padre=c2.id INNER JOIN categorias as c1 ON c2.id_padre=c1.id 
WHERE c1.id_padre='".$categoria."' GROUP BY c1.nombre ORDER BY COUNT(p.idProducto) DESC";
$resultados_0 = mysql_query($consulta_0);
while ($row_0 = mysql_fetch_assoc($resultados_0))
{
    echo $row_0['nombre'];
$consulta_1 = "SELECT *, COUNT(p.idProducto) FROM productos as p INNER JOIN categorias as c3 ON p.idCat=c3.id 
INNER JOIN categorias as c2 ON c3.id_padre=c2.id WHERE c2.id_padre='".$row_0['id']."' 
GROUP BY c2.nombre ORDER BY COUNT(p.idProducto) DESC";
$resultados_1 = mysql_query($consulta_1);
    while ($row_1 = mysql_fetch_assoc($resultados_1))
    {
        echo "-".$row_1['nombre']." (".$row_1['COUNT(p.idProducto)'].")";
    }
}
?>    
  Esto me muestra algo así ... solo si encuentra resultados: 
Alimentos
- Carnes (3)
- Verduras (7)
- Frutas (2) 
Pero al pasarle el id de carnes no funcionaria ... y quiero q me muestre algo así 
Carnes
- Cortes especiales (2)
- Embutidos (1) 
Muchas gracias por la correccion