Divide y venceras....
Código:
Select `subConsulta1`.`titulo` AS `titulo`,
`subConsulta1`.`Total_Posts,
`subConsulta2`.`id` as `UltimoPost`,
`subConsulta2`.`Usuario` as `Usuario`,
`subConsulta2`.`titulo` as `titulo_post`,
`subConsulta2`.`titulo_url` as `titulo_url_post`,
`subConsulta2`.`fecha` as `fecha_post`
FROM
(Select `foro`.`id`,`foro`.`titulo` AS `titulo`, COUNT(*) as `Total_Posts`
FROM `foros` `foro` LEFT JOIN `foros_posts` `post`
ON `foro`.`id`=`post`.`id_foro`
group by `foro`.`id`,`foro`.`titulo`) `subConsulta1`
LEFT JOIN
(Select `fp`.`id`, `fp`.`id_foro`,`usu`.`Usuario`,
`fp`.`titulo`, `fp`.`titulo_url`,`fp`.fecha`
FROM `foros_posts` `fp` join `Usuarios` `usu`
on `fp`.`id_usuario`=`usu`.`id`
WHERE `fp`.`id` IN (Select max(`subfp`.`id`) as `ultimopost`
from `foros_posts` `subfp`
group by `subfp`.`id_foro`)) `subConsulta2`
ON `subConsulta1`.`id`=`subConsulta2.`id_foro`;
A vote pronto creo que esto da lo mismo que lo tuyo
pero sin funciones solo con SQL, he supuesto que tienes una tabla usuarios donde en el campo usuario esta el nombre del usuario, es decir lo que buscas con la función `Usuario`(`post`.`id_usuario`) .
En la subconsulta1 obtengo una lista de todos los foros con su total de post.
En la dos obtengo los datos del ultimo post de los foros que tengan algun post
El LEFT JOIN entre las dos subconsulta me asegura que me va ha mostrar todos los foros (parte izquierda de la relación) tengan o no ultimo post.
Tambien he supuesto que si creas vistas estas usando innoDB
Quim