Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Optimizar datos

Estas en el tema de Optimizar datos en el foro de Mysql en Foros del Web. Tengo una base de datos de libros. En una tabla tengo la información completa de los libros ,y e otra, tengo sus autores, que van ...

  #1 (permalink)  
Antiguo 23/07/2010, 04:09
 
Fecha de Ingreso: julio-2010
Mensajes: 116
Antigüedad: 13 años, 9 meses
Puntos: 0
Optimizar datos

Tengo una base de datos de libros. En una tabla tengo la información completa de los libros ,y e otra, tengo sus autores, que van entre 1 y 10

Me gustaria saber si existe alguna manera, de, creando una nueva tabla, poder tener en un solo registro, los datos del libro y todos sus autores.
El problema que tengo, es que cuando realizo las consultas, me salen en distintos registros, y querría poder tenerlo todo en la misma "linea".

Existe alguna manera de poder hacerlo?

Gracias
  #2 (permalink)  
Antiguo 23/07/2010, 04:26
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 8 meses
Puntos: 150
Respuesta: Optimizar datos

¿En la tabla libros tienes algun campo llamando ID_autor o algo parecido con el ID correspondiente en la tabla autores? Si es asi, tan solo tienes que ejecutar una consulta uniendo ambas tablas. Respondeme con esos datos y te digo.
  #3 (permalink)  
Antiguo 23/07/2010, 04:30
 
Fecha de Ingreso: julio-2010
Mensajes: 116
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Optimizar datos

En la tabla autores, tengo un campo llamado id_libro
  #4 (permalink)  
Antiguo 23/07/2010, 04:38
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 8 meses
Puntos: 150
Respuesta: Optimizar datos

Cita:
Iniciado por sirchote Ver Mensaje
En la tabla autores, tengo un campo llamado id_libro
LLevarte el ID de libro a la tabla autores significa que forzosamente UN AUTOR solo podrá estar relacionado con UN LIBRO, ninguno más ¿es asi como quieres tu modelo relacional? Deberías hacer al reves, en la tabla libros tener un campo ID_Autor, de modo que un mismo autor pueda estar relacionado con muchos libros.

Luego con una sentencia MYSQL tal que:

Select autores.*,libros.* from autores left join libros on autores.ID=libros.ID_Autor order by autores.ID ASC


Te mostrará toda la lista de autores-libros ordenados por el ID del autor de forma ascendente.

Prueba a ver que tal.
  #5 (permalink)  
Antiguo 23/07/2010, 04:43
 
Fecha de Ingreso: julio-2010
Mensajes: 116
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Optimizar datos

Basicamente lo que quiero, es poder ver de modo limpio, el nombre del libro, su titulo, y sus distintos autores.

El problema es que esta mal hecho de base, ya que un autor tiene X id_autor, y lo que lo relaciona con el libro, es el id_libro.

la clave principal de autor, es autonumerica

Quiza se pueda realizar una consulta donde me aparezca eso, pero el problema es que cuando realizo la consulta, me sale

Titulo libro1, autor1
Titulo libro1, autor2
Titulo libro1, autor3
Titulo libro2, autor1
Titulo libro2, autor2

y lo que me gustaria tener es:

Titulo libro1, autor1, autor2, autor3
Titulo libro2, autor1, autor2
Titulo libro3, autor1
etc

Espero explicarme bien

Muchas gracias por las respuestas
  #6 (permalink)  
Antiguo 23/07/2010, 04:48
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 8 meses
Puntos: 150
Respuesta: Optimizar datos

Aha, entonces si un autor puede tener muchos libros y un libro puede tener muchos autores no queda otra que añadir una tabla nueva que relacione ambas. Aunque si me dices que un libro como máximo puede tener 3 autores entonces podrias añadir en libro 3 campos tal que ID_Autor1, ID_Autor2, ID_Autor3 ¿como lo quieres hacer?
  #7 (permalink)  
Antiguo 23/07/2010, 04:59
 
Fecha de Ingreso: julio-2010
Mensajes: 116
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Optimizar datos

Si, esa era mi idea inicial, el crear una nueva tabla, en la que tenga, la informacion del libro, y el maximo de autores (que son 10), y tener exactamente eso

id_libro, genero, titulo, etc, etc, nombreautor1, apellidoautor1, nombreautor2, apellidoautor2, ...... nombreautor10, apellidoautor10

pero hacerlo a mano, me voy a morir, ya que son unos 600 libros
de nuevo, gracias
  #8 (permalink)  
Antiguo 23/07/2010, 05:04
 
Fecha de Ingreso: julio-2010
Mensajes: 116
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Optimizar datos

Ahora mismo esta asi


tabla libros

id_libro, genero, titulo, resumen


tabla autores

id_autor, id_libro, nombre, apellido

pero el problema es el siguiente:

id_autor, id_libro (referenciado con el id de la tabla libros), nombre, apellido

1 1 juan juan
2 1 pepito pepito
3 2 juan juan
4 2 pepito pepito

y me gustaria tenerlo:

tabla nueva

id_libro, genero, titulo, resumen, nombre1, apellido1, nombre2, apellido2

1 x lala etc juan juan pepito pepito
2 q df fdf juan juan pepito pepito
  #9 (permalink)  
Antiguo 23/07/2010, 05:08
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 8 meses
Puntos: 150
Respuesta: Optimizar datos

Asi cada vez que añadas un libro tienes que volver a rellenar los nombres y apellidos del mismo autor, tendrias la tabla llena de "juan juan" por ejemplo.

Tal como tienes las tablas yo no se hacer lo que pides, si hicieras los cambios para una de las dos formas que te puse antes entonces si.
  #10 (permalink)  
Antiguo 23/07/2010, 05:14
 
Fecha de Ingreso: julio-2010
Mensajes: 116
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Optimizar datos

si, ya se que es un problema :(

muchas gracias de todos modos, de verdad
  #11 (permalink)  
Antiguo 23/07/2010, 05:15
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: Optimizar datos

Si tienes dos tablas, Autor y Libro, y libros con muchos autores, lo que corresponde es una tercera tabla con la PK de ambos: Libro_Autor.
Eso es lo que corresponde según el modelo referencial porque la relación entre Libro y Autor es de cardinalidad M:N (muchos a muchos), y por definición, esa relación se transforma en una tabla al pasar al modelo físico.
Cualquier otra solución que implique campos multivaluados sería una violación al modelo y en el mejor de los casos te complicaría inmensamente las consultas.
Si usases como solución tener varios campos como FK de autor en la tabla Libro, lo que tendrías sería un doble problema:
- Por un lado no todos los libros tienen muchos autores, lo cual implica desperdiciar espacio de disco en campos vacíos y además que deberías determinar cuántos campos: ¿2?, ¿6?, ¿32?... Mira que las antologías pueden abarcar 100 autores sin problemas (tengo una con 172 autores).
- Por otro lado, la definición de esos campos como FK requeriría que se cumpliese la restricción de FK, la que es que no puede ser NULL, y que debe ser una PK válida en la tabla Autor, cosa que no se cumpliría si no llenases todos los campos...

Resumiendo:
Autor(id_autor, nombre, apellido)
Libro(id_libro, genero, titulo, resumen)
Libro_autor(id_autor, id_libro)
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 23/07/2010, 05:36
 
Fecha de Ingreso: julio-2010
Mensajes: 116
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Optimizar datos

si, se que desde el principio esta mal

estoy poniendo en la tabla de libros, los campos id_autor1, id_autor2, ...., id_autor10, con sus respectivos id

luego, supongo que me resultara mucho mas facil todo
  #13 (permalink)  
Antiguo 23/07/2010, 05:50
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: Optimizar datos

En realidad, no.
Cambiar una base que ya está operativa es un enorme incordio. Y las consultas contra varios campos FK en esas condiciones, serán otro problema. Se vuelven muy complicadas.
Si aún estás en etapa de desarrollo, mejor crea las tres tablas.
Te ahorrarás dolores de cabeza a futuro.

Y muchos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #14 (permalink)  
Antiguo 23/07/2010, 05:53
 
Fecha de Ingreso: julio-2010
Mensajes: 116
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Optimizar datos

el problema es que esta ya todo rellenado, pero los datos que hay, ya no se van a modificar

lo que quiero es, crear unas "cartas" con la herramienta esa de word, y quiero tener la información completa de cada libro

quiza me estoy explicando fatal, no lo sé
  #15 (permalink)  
Antiguo 23/07/2010, 06:00
 
Fecha de Ingreso: julio-2010
Mensajes: 116
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Optimizar datos

me voy a explicar de la mejor forma que pueda


creo que mas o menos ya ha quedado claro el estado actual de la base de datos, ahora, lo que quiero llegar a conseguir:



quiero poder, tener en la herramienta esa de combinar correspondencia 2 cosas


la primera:

tener una hoja distinta para cada libro con la siguiente información

Ordenado por género:

titulo

resumen

autores, todos


y la segunda:

del autor principal de cada libro, el cual tiene un campo que así lo indica(vienen numerados, el 1 es el principal, el resto, 2,3,4,5.... ), del cual tengo su direccion de correo, quiero poder, mediante la misma herramienta de word:

poder mandarle un correo electronico, con aproximadamente el contenido del informe obtenido en lo primero que quiero obtener.



La pregunta es, es eso posible? :D

gracias
  #16 (permalink)  
Antiguo 23/07/2010, 06:36
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: Optimizar datos

Todo es posible.
Basado en este modelo:
Cita:
Autor(id_autor, nombre, apellido)
Libro(id_libro, genero, titulo, resumen)
Libro_autor(id_autor, id_libro)
La consulta necesaria para responder eso sería mas o menos así:
Código MySQL:
Ver original
  1. SELECT genero, titulo, autores, resumen
  2.    (SELECT L.genero, L.titulo, GROUP_CONCAT(CONCAT(A.apellido, ', ', A.nombre) SEPARATOR '; ') autores, resumen
  3.     FROM libro L INNER JOIN libro_autor USING(id_libro) INNER JOIN autor A USING(id_autor)
  4.     GROUP BY L.id_libro) TabaLibros
  5. ORDER BY genero, titulo;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #17 (permalink)  
Antiguo 23/07/2010, 06:41
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: Optimizar datos

El resultado de esa consulta sería mas o menos así:
Código MySQL:
Ver original
  1. +--------+------------------------------+----------------------------+------------+
  2. | genero | titulo                       | autores                    | resumen    |
  3. +--------+------------------------------+----------------------------+------------+
  4. |POLICIAL|KLJHHKHKHKLKJHKHKJHKJHKH      |LKJK; KJHKJH; OUOIUOIU      |KJUOIUOI... |
  5. +--------+------------------------------+----------------------------+------------+
  6. |POLICIAL|KLJHHKHKHKLKJHKHKJHKJHKH      |LKJK; KJHKJH; OUOIUOIU      |KJUOIUOI... |
  7. +--------+------------------------------+----------------------------+------------+
  8. |POLICIAL|KLJHHKHKHKLKJHKHKJHKJHKH      |LKJK; KJHKJH; OUOIUOIU      |KJUOIUOI... |
  9. +--------+------------------------------+----------------------------+------------+
  10. |POLICIAL|KLJHHKHKHKLKJHKHKJHKJHKH      |LKJK; KJHKJH; OUOIUOIU      |KJUOIUOI... |
  11. +--------+------------------------------+----------------------------+------------+
  12. |POLICIAL|KLJHHKHKHKLKJHKHKJHKJHKH      |LKJK; KJHKJH; OUOIUOIU      |KJUOIUOI... |
  13. +--------+------------------------------+----------------------------+------------+
  14. |POLICIAL|KLJHHKHKHKLKJHKHKJHKJHKH      |LKJK; KJHKJH; OUOIUOIU      |KJUOIUOI... |
  15. +--------+------------------------------+----------------------------+------------+
  16. |POLICIAL|KLJHHKHKHKLKJHKHKJHKJHKH      |LKJK; KJHKJH; OUOIUOIU      |KJUOIUOI... |
  17. +--------+------------------------------+----------------------------+------------+
  18. |POLICIAL|KLJHHKHKHKLKJHKHKJHKJHKH      |LKJK; KJHKJH; OUOIUOIU      |KJUOIUOI... |
  19. +--------+------------------------------+----------------------------+------------+
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #18 (permalink)  
Antiguo 23/07/2010, 06:49
 
Fecha de Ingreso: julio-2010
Mensajes: 116
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Optimizar datos

pues realmente eso si que me iria bien

deduzco que has copiado/pegado todo a saco y que cada linea es un libro distinto, es asi?

realmente, si que me iria bien eso, provare a ver
  #19 (permalink)  
Antiguo 23/07/2010, 07:03
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: Optimizar datos

Create una base de pruebas y trabaja con las tres tablas, nada más.
Si hay que afinar algo, estamos a tiempo.
Puede incluso que se pueda crear la consulta ocmo una vista (VIEW), a la cual se puede acceder como si fuese una tabla. Eso puede ser mejor aún si vas a trabajar con Word, ya que no sé si la interoperatividad con Word aceptará recursos de SQL. En cambio, una vista actúa para el caso como si fuese una tabla real.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #20 (permalink)  
Antiguo 23/07/2010, 07:17
 
Fecha de Ingreso: julio-2010
Mensajes: 116
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Optimizar datos

GROUP_CONCAT(CONCAT(A.apellido, ', ', A.nombre) SEPARATOR '; ') autores, resumen

eso me decia que nanai de la china


voy a probar creando las tablas de nuevo, a ver


he visto que con un informe del acces, conseguia sacar lo de los autores de cada libro

ahora el problema que tengo, es lo de la correspondencia, pero quiza se pueda hacer de alguna otra manera no se

la gracia seria tener, una tabla con:

titulo genero autores (del 1 al 10, los que sean), mail del primero, resumen, y lo que necesite

y usar la funcion esa del word, pillando el correo de alli
  #21 (permalink)  
Antiguo 23/07/2010, 07:25
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: Optimizar datos

Cita:
eso me decia que nanai de la china
No entiendo a qué te refieres...

Cita:
he visto que con un informe del acces, conseguia sacar lo de los autores de cada libro
¿Estás trabajando con MySQL, ¿no? Porque Access no es un motor de bases de datos, es apenas un manejador de tablas con recursos de SQL. Además Access tiene su propia integración con Word, por lo que no cuenta como ejemplo para este caso.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #22 (permalink)  
Antiguo 23/07/2010, 07:43
 
Fecha de Ingreso: julio-2010
Mensajes: 116
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Optimizar datos

habia puesto mal un campo, por eso me daba el error.

estoy usando mysql y access, todo a la vez, a ver si consigo algo :D
  #23 (permalink)  
Antiguo 23/07/2010, 07:48
 
Fecha de Ingreso: julio-2010
Mensajes: 116
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Optimizar datos

Vale perfecto, ahora tengo eso.

Sería posible añadir clausulas

es decir

where genero='terror', si es asi, donde se añadiria

a parte, me gustaria añadir 1 campo mas, que seria el mail del autor cuyo numero_autor sea = 1, en un campo nuevo,

visto lo visto, quiza sea posible

gracias de nuevo


pd: añado de paso, es posible realizar tambien un count del numero de autores y añadirlo en un campo nuevo, o sino mirar el max del numero_autor de los autores

se que pido mucho, pero gracias :D

Última edición por sirchote; 23/07/2010 a las 07:57
  #24 (permalink)  
Antiguo 23/07/2010, 08:04
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: Optimizar datos

Cita:
a parte, me gustaria añadir 1 campo mas, que seria el mail del autor cuyo numero_autor sea = 1, en un campo nuevo,
Podrías manejar los e-Mail en otra columna, o bien al lado de cada nombre de autor:
Código MySQL:
Ver original
  1. SELECT genero, titulo, autores, resumen
  2.    (SELECT L.genero, L.titulo, GROUP_CONCAT(CONCAT(A.apellido, ', ', A.nombre, ' - ', A.email) SEPARATOR '; ') autores, resumen
  3.     FROM libro L INNER JOIN libro_autor USING(id_libro) INNER JOIN autor A USING(id_autor)
  4.     GROUP BY L.id_libro) TabaLibros
  5. ORDER BY genero, titulo;
Agregar un contador de autores, es simplemente una columna más:
Código MySQL:
Ver original
  1. SELECT genero, titulo, autores, resumen, CantAutores
  2.    (SELECT L.genero, L.titulo, GROUP_CONCAT(CONCAT(A.apellido, ', ', A.nombre, ' - ', A.email) SEPARATOR '; ') autores, resumen, COUNT(DISTINCT A.id_autor) CantAutores
  3.     FROM libro L INNER JOIN libro_autor USING(id_libro) INNER JOIN autor A USING(id_autor)
  4.     GROUP BY L.id_libro) TabaLibros
  5. ORDER BY genero, titulo;

El WHERE tiene que ir en la subconsulta interior:
Código MySQL:
Ver original
  1. SELECT genero, titulo, autores, resumen, CantAutores
  2.    (SELECT L.genero, L.titulo, GROUP_CONCAT(CONCAT(A.apellido, ', ', A.nombre, ' - ', A.email) SEPARATOR '; ') autores, resumen, COUNT(DISTINCT A.id_autor) CantAutores
  3.     FROM libro L INNER JOIN libro_autor USING(id_libro) INNER JOIN autor A USING(id_autor)
  4.     WHERE L.genero = 'terror'
  5.     GROUP BY L.id_libro) TabaLibros
  6. ORDER BY genero, titulo;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #25 (permalink)  
Antiguo 23/07/2010, 08:05
 
Fecha de Ingreso: julio-2010
Mensajes: 116
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Optimizar datos

el tema de los email, solo quiero guardar el que tiene el valor numero_autor=1, se podria eso tambien?

pruebo todo lo otro

no se como agradecerte tanta ayuda, gracias de nuevo
  #26 (permalink)  
Antiguo 23/07/2010, 08:38
 
Fecha de Ingreso: julio-2010
Mensajes: 116
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Optimizar datos

me funciona todo perfecto, gracias

ahora me falta añadir SOLO el mail del primer autor

existe un campo en la tabla autores, que me dice si es el autor principal
si tiene el valor 1 en numero_autor, entonces es el principal

podria añadir un nuevo campo, donde solo se añadiera el mail del autor con ese valor en 1?

;)

gracias
  #27 (permalink)  
Antiguo 23/07/2010, 08:54
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: Optimizar datos

Vamos a probar esta forma, forzando el funcionamiento de GROUP_CONCAT():
Código MySQL:
Ver original
  1.   genero,
  2.   titulo,
  3.   autores,
  4.   emailAutor,
  5.   resumen,
  6.   CantAutores
  7.    (SELECT
  8.        L.genero,
  9.        L.titulo,
  10.        GROUP_CONCAT(CONCAT(A.apellido, ', ', A.nombre, ' - ', A.email) SEPARATOR '; ') autores,
  11.        CAST(GROUP_CONCAT(IF(A.numero_autor = 1,A.email, '') SEPARATOR '') AS CHAR) emailAutor,
  12.        resumen,
  13.        COUNT(DISTINCT A.id_autor) CantAutores
  14.     FROM libro L
  15.       INNER JOIN libro_autor USING(id_libro) INNER JOIN autor A USING(id_autor)
  16.     WHERE L.genero = 'terror'
  17.     GROUP BY L.id_libro) TabaLibros
  18. ORDER BY genero, titulo;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #28 (permalink)  
Antiguo 23/07/2010, 09:04
 
Fecha de Ingreso: julio-2010
Mensajes: 116
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Optimizar datos

diria que funciona perfecto :D

eres un crack, que digo, un super crack!

muchisimas gracias!!!!!!

miraré a ver si con esto ya lo tengo todo, pero vamos, que tiene buenisima pinta :D

me edito:

¿esto ahora lo puedo insertar tal cual me sale la consulta, en una tabla nueva?
  #29 (permalink)  
Antiguo 23/07/2010, 09:25
Avatar de 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, 4 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)
  #30 (permalink)  
Antiguo 23/07/2010, 09:27
 
Fecha de Ingreso: julio-2010
Mensajes: 116
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Optimizar datos

genial, lo pruebo, pero visto lo visto, seguro que lo has clavado :D

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:43.