Tema: Vista lenta
Ver Mensaje Individual
  #2 (permalink)  
Antiguo 14/11/2008, 07:40
quimfv
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Vista lenta

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