Ver Mensaje Individual
  #29 (permalink)  
Antiguo 23/07/2010, 09:25
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Optimizar datos

Esa consulta te genera una lectura en memoria. Si creas una tabla con eso puedes accederla directamente y sin problemas. En cualquier caso la consulta siempre es mejor porque tendrá la información actualizada.
En ocasiones lo que conviene es crear a apartir de una consulta que se repite constantemente, una VIEW, ya que las mismas actúan como si fuesen tablas físicas sin serlo, y de esa forma podrías leer siempre la info actualizada.
La única restricción es que en MySQL las vistas no admiten subconsultas, por lo que para obtener el resultado de esto es necesario hacer dos vistas una llamando a la otra:
Primero en MySQL se crea esta vista:
Código MySQL:
Ver original
  1. CREATE OR REPLACE VIEW TablaLibros
  2.   L.genero,
  3.   L.titulo,
  4.   GROUP_CONCAT(CONCAT(A.apellido, ', ', A.nombre, ' - ', A.email) SEPARATOR '; ') autores,
  5.   CAST(GROUP_CONCAT(IF(A.numero_autor = 1,A.email, '') SEPARATOR '') AS CHAR) emailAutor,
  6.   resumen,
  7.   COUNT(DISTINCT A.id_autor) CantAutores
  8. FROM libro L INNER JOIN libro_autor USING(id_libro) INNER JOIN autor A USING(id_autor)
  9. GROUP BY L.id_libro;

Y luego esta:

Código MySQL:
Ver original
  1. CREATE OR REPLACE VIEW ListarLibros
  2.   genero,
  3.   titulo,
  4.   autores,
  5.   emailAutor,
  6.   resumen,
  7.   CantAutores
  8. FROM TablaLibros
  9. ORDER BY genero, titulo;

Hay que crearlas en ese orden porque si no dará error por tabla inexistente. Si miras bien, la segunda está invocando a la primera como si fuese una tabla.

Finalmente, la consulta, para el caso de género "terror" sería:
Código MySQL:
Ver original
  1. FROM ListarLibros
  2. WHERE genero = 'terror';

Eso devolvería lo que necesitas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)