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

Unificar o minimizar consulta MySQL

Estas en el tema de Unificar o minimizar consulta MySQL en el foro de Mysql en Foros del Web. Hola buenos dias... Como yo puedo generar una consulta donde yo relaciono hasta 3 trablas de una DB. Como por ejemplo: TABLA 1 sumando1= 5 ...
  #1 (permalink)  
Antiguo 18/05/2010, 10:26
 
Fecha de Ingreso: diciembre-2008
Ubicación: Av. Republica Casa#106
Mensajes: 125
Antigüedad: 15 años, 10 meses
Puntos: 0
Unificar o minimizar consulta MySQL

Hola buenos dias... Como yo puedo generar una consulta donde yo relaciono hasta 3 trablas de una DB.

Como por ejemplo:

TABLA 1
sumando1= 5
sumando2=5
total=10

TABLA 2

sumando1=8
sumando2=6
total=14

TABLA 3
sumando1=4
sumando=1
total=5

La consulta que necesito es que me sume todo lo que tengo en cada columna llamada sumando1, sumando2 y total.

sumando1: 5+8+4:17
sumando2: 5+6+1:12
total: 10+14+5:29.

Por favor alguien que me ayude...
  #2 (permalink)  
Antiguo 18/05/2010, 10:47
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Unificar o minimizar consulta MySQL

Código SQL:
Ver original
  1. SELECT
  2. SUM(T1.total1),
  3. SUM(T1.total2),
  4. SUM(T1.total3)
  5. FROM
  6. (SELECT tabla1.sumando1 AS total1,
  7.               tabla1.sumando2 AS total2,
  8.               tabla1.sumando3 AS total3
  9.  FROM tabla1
  10. UNION ALL
  11. SELECT tabla2.sumando1 AS total1,
  12.               tabla2.sumando2 AS total2,
  13.               tabla2.sumando3 AS total3
  14.  FROM tabla2
  15. UNION ALL
  16. SELECT tabla3.sumando1 AS total1,
  17.               tabla3.sumando2 AS total2,
  18.               tabla3.sumando3 AS total3
  19.  FROM tabla3)T1;
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 18/05/2010, 18:54
 
Fecha de Ingreso: diciembre-2008
Ubicación: Av. Republica Casa#106
Mensajes: 125
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Unificar o minimizar consulta MySQL

Ok. Muchas gracias huesos52. Otra pregunta... Cuantas tablas puedo yo llegar a relacionar con este tipo de consulta?
  #4 (permalink)  
Antiguo 18/05/2010, 22:20
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Unificar o minimizar consulta MySQL

N tablas.
Sin embargo, entre mas tablas, mas se verá afectado el rendimiento.
saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 19/05/2010, 07:13
 
Fecha de Ingreso: diciembre-2008
Ubicación: Av. Republica Casa#106
Mensajes: 125
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Unificar o minimizar consulta MySQL

Sera que si yo relaciono 7 tablas, esa cantidad podria afectar el rendimiento como tu dices?
  #6 (permalink)  
Antiguo 19/05/2010, 07:58
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Unificar o minimizar consulta MySQL

No hay un único factor intervniente. Si cruzas 7 tablas con 50 registros cada una no es lo mismo que cruzar 7 tablas con 2.5000.00 de registros en cada una...

Depende de varios factores:

- Longitud de claves y registros.
- Cantidad de registros afectados.
- Diseño de índices y su selectividad.
- Dispersión de datos seleccionados.
- Condiciones de búsqueda.
- Hardware usado (Micro, RAM, discos, etc.).
- Topología de la red.
- Versión del DBMS.

Optimizar una consulta a veces no es simplemente reescribirla...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 19/05/2010, 09:02
 
Fecha de Ingreso: diciembre-2008
Ubicación: Av. Republica Casa#106
Mensajes: 125
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Unificar o minimizar consulta MySQL

Yo voy a relacionar las 7 tablas y cada una tiene 170 columnas...!!! Seria bien relacionarlas o que otro metodo me pueden aconsejar para relacionar las 7 tablas?
  #8 (permalink)  
Antiguo 19/05/2010, 09:03
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Unificar o minimizar consulta MySQL

170 columnas?
Acá el problema parece ser de diseño de la base de datos.

No te queda otra que probarlo tu mismo.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #9 (permalink)  
Antiguo 19/05/2010, 09:05
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Unificar o minimizar consulta MySQL

Estoy de acuerdo.
Que haya tablas con 170 columnas me habla o de una tabla con información sumamente compleja, o una tabla mal diseñada y con falta de normalización.
¿Qué tipo de entidad requiere 170 campos?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 19/05/2010, 09:31
 
Fecha de Ingreso: diciembre-2008
Ubicación: Av. Republica Casa#106
Mensajes: 125
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Unificar o minimizar consulta MySQL

Es una tabla con información sumamente compleja, en ella se almacenan tres registros, como por ejemplo... 4 + 4 = 8. Cada numero es un input, entonces si realizamos la suma de primer numero en input seria la siguiente, 24 input + 24 input que seria el siguiente numero que coloque en el ejemplo anterior y los ultimos 24 input que serian los del resultado igual a 8. Si sumamos todos esos input me deben de dar un resultado de 72 input, pero aqui viene lo mas importante... Esta tabla esta dividida por meses. Osea los primeros 72 input son del mes de enero, los otros 72 input serian del mes de febrero y los otros 72 input serian del mes de marzo. No se si me explique bien gnzsoloyo.
  #11 (permalink)  
Antiguo 19/05/2010, 09:38
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Unificar o minimizar consulta MySQL

Si, te has explicado: Lo que tienes es una tabla desnormalizada con montones de problemas de optimización a futuro...
__________________
¿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 19/05/2010, 10:15
 
Fecha de Ingreso: diciembre-2008
Ubicación: Av. Republica Casa#106
Mensajes: 125
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Unificar o minimizar consulta MySQL

Ok. gnzsoloyo. Que me recomiendas hacer con ese detalle de la tabla o con el proceso que realizo para guardar?
  #13 (permalink)  
Antiguo 19/05/2010, 14:35
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Unificar o minimizar consulta MySQL

Si cada mes de cada año tienes 24 datos numéricos a ingresar, en realidad tienes una tabla de 4 campos: Tabla(anio, mes, dato_id, dato)
Los primeros dos definen a qué período pertenecen, y el tercer campo identifica el subitem de dato, y va numerado de 1 a 24. El último es dato real.
En este contexto, los campos se deben definir:
Tabla(
anio SMALLINT UNSIGNED,
mes TINYINT UNSIGNED,
dato_id TINYINT UNSIGNED, ,
dato INT UNSIGNED);

En esta forma, cada registro tendría 15 Bytes de longitud, contra una longitud que no puedo definir porque no detallas la estructura de los campos, pero supongo que debe ser mucho más extensa.
En este caso, se puede recuperar la misma estructura de datos, todos los 170 campos si quieres, en la consulta, sin necesidad de tener que crearlos.

Un par de consejos para la normalización que te pueden resultar útiles para evitar fallas de diseño:

- No se deben guardar datos calculables. Si tienes un campo C que representa la suma de los campos A y B, el C es superfluo, porque el resultado se puede crear en la consulta..
- No se deben usar campos más grandes de lo necesario. Si tienes un campo cuyo valor no superará el 12, no tiene sentido poner un INT, que tiene 4 Bytes, cuando un TINYINT alcanza, y tiene 1 byte (no te olvides que los números se guardan como binarios y no como cifras).
- Si tienes esquemas repetidos, como ha sido el caso de los meses en un mismo registro, esos pertenecen a otra tabla vinculada, o bien, el esquema entero puede ser simplificado.
__________________
¿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 19/05/2010, 16:18
 
Fecha de Ingreso: diciembre-2008
Ubicación: Av. Republica Casa#106
Mensajes: 125
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Unificar o minimizar consulta MySQL

Ok. gnzsoloyo. Muchas gracias... La verdad que me aclarastes muchas dudas...
  #15 (permalink)  
Antiguo 19/05/2010, 17: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: 17 años
Puntos: 2658
Respuesta: Unificar o minimizar consulta MySQL

Creo que lo que sí me olvidé mencionar es que los primeros tres campos (anio, mes, dato_id) componen la PK de la tabla...
Un olvido.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: minimizar
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 12:28.