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

Multiples tablas en una sola consulta

Estas en el tema de Multiples tablas en una sola consulta en el foro de Mysql en Foros del Web. Saludos, Tengo varias tablas de las cuales 3 son las que quiero realizar la consulta. Una contiene los campos de selección (los dropdown de la ...
  #1 (permalink)  
Antiguo 20/12/2012, 12:34
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Multiples tablas en una sola consulta

Saludos,

Tengo varias tablas de las cuales 3 son las que quiero realizar la consulta. Una contiene los campos de selección (los dropdown de la aplicación), otra donde se inserta los datos, en ella inserto el id de la tabla que tiene los valores de los dropdown y otra donde están los usuarios. Quiero desarrollar, en un solo query, unos reportes que indique por usuario cuantos de la tabla que contiene los valores de los dropdown reportó. Ejemplo

Si en la tabla dropdown tengo los siguientes valores

Código MySQL:
Ver original
  1. 1, foo
  2. 2, bar
  3. 3, baz
  4. 4, bat

Me debe mostrar en el reporte
Código MySQL:
Ver original
  1. foo, 3, pepe
  2. bar, 0, pepe
  3. baz, 4, pepe
  4. bat, 0, pepe

Pero al hacer la consulta me muestra solo aquellos que tiene datos. Es decir me trae esto solamente
Código MySQL:
Ver original
  1. foo, 3, pepe
  2. baz, 4, pepe

Ignorando los datos que no tienen reportes. La consulta que preparé es algo así
Código MySQL:
Ver original
  1. SELECT d.dropdown_name, COUNT(*) counter, u.name
  2. FROM dropdown d LEFT JOIN reports r ON r.dropdown_id = d.dropdown_id
  3.                 INNER JOIN users u ON u.users_id = r.created_by
  4. WHERE DATE(r.created_datetime) = '2012-11-01' AND r.created_by = '1'
  5. GROUP BY d.dropdown_id

Yo ya lo tengo hecho en multiples consultas, solo estoy verificando si se puede lograr en una sola (me imagino que sí). Llevo varios días dando vuelta a ver si lo logro pero se me escapa alguna lógica que no doy (si es que la hay, claro está). El problema con la multiple consulta, es que son tantos datos, muchos usuarios y muchos datos en la tabla de dropdown que con 30 usuarios nada más se tarda aproximadamente 1 minuto. Esto ya no es culpa de mysql, sino de que tengo que estar abriendo conexión de base de datos por cada dropdown_id, luego por cada fecha y luego por cada usuario. Por eso pregunto si hay forma de lograrlo en una sola para así solo abrir por cada usuario y fecha.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #2 (permalink)  
Antiguo 20/12/2012, 12: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, 5 meses
Puntos: 2658
Respuesta: Multiples tablas en una sola consulta

Es algo bastante raro y muy ineficiente, pero podría andar por acá:
Código MySQL:
Ver original
  1. SELECT T1.dropdown_name, COUNT(r.created_by) counter, T1.name
  2.     (SELECT * FROM dropdown JOIN users) T1
  3.     LEFT JOIN reports r ON T1.dropdown_id = r.dropdown_id
  4.     DATE(r.created_datetime) = '2012-11-01'
  5.     AND T1.users_id= 1
  6. GROUP BY d.dropdown_id, T1.name
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 20/12/2012, 13:45
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Multiples tablas en una sola consulta

Gracias. Estuve trasteando y hasta ahora, con lo que me demostraste, logré que salieran todos los datos, pero en todos me muestra el conteo total de lo que hizo ese usuario
Código MySQL:
Ver original
  1. SELECT tc.type_call, COUNT(*) counter, u.name
  2. FROM type_call tc JOIN reports r
  3.      LEFT JOIN users u ON r.created_by = u.users_id
  4. WHERE DATE(r.created_datetime) = '2012-11-01'
  5.       AND u.users_id = 42
  6. GROUP BY tc.type_call_id
Es decir si el usuario hizo 44 en ese día, me va a mostrar en todos algo así
Código MySQL:
Ver original
  1. foo, 44, pepe
  2. bar, 44, pepe
  3. baz, 44, pepe
  4. bat, 44, pepe
Cuando se supone que me muestre
Código MySQL:
Ver original
  1. foo, 0, pepe
  2. bar, 34, pepe
  3. baz, 0, pepe
  4. bat, 10, pepe

Sigo trasteando e indagando, cualquier sugerencia es bienvenida y gracias como siempre gnzsoloyo, siempre dando la mano, como muchos en esta parte del foro
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #4 (permalink)  
Antiguo 20/12/2012, 14: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, 5 meses
Puntos: 2658
Respuesta: Multiples tablas en una sola consulta

Cita:
en todos me muestra el conteo total de lo que hizo ese usuario
Por eso precisamente puse que contara el valor de un campo dado.
Ese campo se supone que debe ser NULL si no hay instancias que lo relacionen (de allí también el LEFT JOIN), y en ese caso debería dar cero.
Cuando usas COUNT(*) le estás diciendo que cuente todos los registros devueltos, y no es la idea.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 20/12/2012, 14:09
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Multiples tablas en una sola consulta

Ohhh, es que trate lo que me diste, pero me trae todo lo que todos los usuarios hicieron y no lo que hizo un usuario específico. Pero vuelvo a trastear lo que me diste a ver si fue que hice algo mal al convertirlo a lo que tengo hecho. Verifico nuevamente.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #6 (permalink)  
Antiguo 20/12/2012, 14:26
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, 5 meses
Puntos: 2658
Respuesta: Multiples tablas en una sola consulta

No tengo en este momento disponible el MySQL para probarlo (estoy trabajando en este momento), así que tendré que verificarlo esta noche, pero la cosa anda por allí.
__________________
¿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 21/12/2012, 07:49
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Multiples tablas en una sola consulta

Conforme a esta idea, pude desarrollar un proceso que ahora es más rápido. Sigo verificando si se puede lograr en una sola consulta, conforme a lo que me diste gnzsoloyo. Voy a tener que leer más para poder lograrlo Estoy al tanto si alguien da como se puede lograr en una sola consulta.

La forma como lo tenía antes era que iba por cada dropdown_id verificando en la base de datos. Esto provocaba que cada vez abriera una conexión y luego hiciera la consulta. Lo que hice fue tomar todo lo que el usuario hizo y luego comparar en un array en PHP cada uno de los dropdown, el proceso así no sobrecarga la base de datos y es un proceso bastante rápido. Aún así, sé que debe haber una forma de lograrlo en una sola consulta y que sea mucho más rápida.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Etiquetas: multiples, select, sql, tabla, tablas, campos
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 20:26.