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

Acceder a subtablas con múltiples registros?

Estas en el tema de Acceder a subtablas con múltiples registros? en el foro de Mysql en Foros del Web. Buenos días, tengo un problema con mi consulta MySql, he estado buscando bastante pero no doy con el clavo, a ver si me podeis echar ...
  #1 (permalink)  
Antiguo 14/06/2012, 03:43
 
Fecha de Ingreso: abril-2011
Mensajes: 85
Antigüedad: 12 años, 11 meses
Puntos: 5
Acceder a subtablas con múltiples registros?

Buenos días, tengo un problema con mi consulta MySql, he estado buscando bastante pero no doy con el clavo, a ver si me podeis echar una mano.

Tengo una tabla, en dónde esa tabla, cada fila tiene una ID. Desde otra tabla, tengo una tabla de productos que tienen una ID propia y otra ID primaria (es decir, la ID de la primera tabla) las cuales coinciden.

En una primera instancia se podría hacer perfectamente con un LEFT JOIN, pero el problema está en que la segunda tabla debe tener varios registros. Mi problema no es que no me funcione, es que me muestra todos los registros de la tabla 1 + tabla 2, y solo quiero que me muestre los registros de la segunda tabla:

(Lo que yo obtengo)

Código:
nombre  -------	apellido -----------	text_nombre
Peter 	          Griffin 	            prueba 1
Peter 	          Griffin 	            prueba 2
(Usando:)
Código MySQL:
Ver original
  1.     p1.nombre,
  2.     p1.apellido,
  3.     p2.text_nombre
  4.   FROM p1
  5.   JOIN p2 ON p1.id = p2.id_nombre
(Qué busco?)
Obtener esto:

Código:
nombre  -------	apellido -----------	text_nombre  -----------	¿text_nombre2?
Peter 	           Griffin 	           prueba 1		            prueba 2
Me he planteado usar GROUP_CONCAT, pero no puede ser ya que tengo bastantes registros a mostrar

Muchas gracias!!
  #2 (permalink)  
Antiguo 14/06/2012, 04:02
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: Acceder a subtablas con múltiples registros?

¿Y por qué no usas INNER JOIN en lugar de LEFT JOIN? De lo ontrario te qjeda invertir las tablas...
__________________
¿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 14/06/2012, 05:04
 
Fecha de Ingreso: abril-2011
Mensajes: 85
Antigüedad: 12 años, 11 meses
Puntos: 5
Respuesta: Acceder a subtablas con múltiples registros?

Lo he probado, pero obtengo los mismos resultados, obtengo 2 filas (en este caso) al igual que LEFT JOIN... qué debería hacer para mostrarlo todo en una misma fila? (Suponiendo que ahora usaré INNER JOIN)

Gracias!
  #4 (permalink)  
Antiguo 14/06/2012, 06:55
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: Acceder a subtablas con múltiples registros?

Ahora entiendo mejor lo que quieres. En realidad lo que debes hacer es invocar la segunda tabla dos veces con diferentes alias, y operar con el WHERE para obtener lo que deseas.
Código MySQL:
Ver original
  1.     p1.nombre,
  2.     p1.apellido,
  3.     p2.text_nombre Prueba1,
  4.     p2.text_nombre Prueba2
  5. FROM p1
  6.     LEFT JOIN p2 ON p1.id = p2.id_nombre
  7.     LEFT JOIN p2 p3 ON p1.id = p3.id_nombre
  8. WHERE p2.id_nombre <> p3.id_nombre
Este tipo de reportes se hace normalmente con recursos de otra clase, sea programando o usando software especial (para OLAP).
No es buena práctica hacero con SQL puro, porque requiere a veces consultas demasiado complicadas o muy largas, del tipo que no ofrece buena performance.
Lo que es más simple de hacer es obtener los datos básicos con una consulta siple, y construir el reporte en la vista del formulario en pantalla... Eso es muchísimo más sencillo yrápido, que hacer este tipo de consultas.
Claro que requiere del programador predisposición a trabajar, y con perdón de la frase, suelen ser demasiado fiacosos.
__________________
¿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 14/06/2012, 08:14
 
Fecha de Ingreso: abril-2011
Mensajes: 85
Antigüedad: 12 años, 11 meses
Puntos: 5
Respuesta: Acceder a subtablas con múltiples registros?

Entiendo. También me plantee esa posibilidad. Entonces, si lo hago con diferentes querys no importa? Lo digo por el tema de la optimización de la base de datos y el consumo de recursos, en este caso, es recomendable realizar diversas querys?

Gracias!
  #6 (permalink)  
Antiguo 14/06/2012, 08: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: 16 años, 4 meses
Puntos: 2658
Respuesta: Acceder a subtablas con múltiples registros?

No dije eso. Dije que se ahce con una sola consulta, y luego la tabla se representa en pantalla por probramación.
La idea es que luego tomas cada registro y lo pones como columna en la pantalla, pasando a la siguiente linea de la tabla cuando encuentres en la rimera columna de la tabla devuelta por la consulta, un cambio de valor.

Esto:
Código MySQL:
Ver original
  1. A   2
  2. A   356
  3. A   25
  4. B   1
  5. B   26
  6. C   32
  7. C   7
  8. C   58
  9. C   9

Quedaría:
Código MySQL:
Ver original
  1. A   2   356 25 
  2. B   1   26     
  3. C   32  7   58  9

¿Se entiende?
__________________
¿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 14/06/2012, 10:58
 
Fecha de Ingreso: abril-2011
Mensajes: 85
Antigüedad: 12 años, 11 meses
Puntos: 5
Respuesta: Acceder a subtablas con múltiples registros?

Sí, lo entiendo perfectamente, pero el caso es que eso ya lo logro hacer, de hecho es como lo tengo estructurado ahora, el caso es que en todas las secuencias se repiten los valores, es decir, si tengo 3 coincidencias me saldría algo como:

Código MySQL:
Ver original
  1. Valor1: Nombre - Valor 2: Apellido - Valor 3: Valor variable 1
  2. Valor1: Nombre - Valor 2: Apellido - Valor 3: Valor variable 2
  3. Valor1: Nombre - Valor 2: Apellido - Valor 3: Valor variable 3

Y a partir de ahí me supongo que se debe filtrar, no? Pero claro, lo que no me interesa es que se repita en cada secuencia el valor 1 y el valor 2 que ya tengo previamente. Entonces si no he entendido mal, lo que debo hacer es lo mismo que hacía (con un INNER JOIN) pero filtrarlo luego por PHP, no? Pero ya te digo, el caso es ese, que obtengo muchas filas con los mismos valores.

Saludos
  #8 (permalink)  
Antiguo 14/06/2012, 11:09
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: Acceder a subtablas con múltiples registros?

Infortunadamente, eso es consecuencia del SQL. Sólo puede devolverte la respuesta armándola con los datos que corresponden, y las repeticiones son consecuencia de la relación.
El tema e que no debes confundir lo que la base devuelve con lo que debes representar en la pantalla. Son cosas diferentes, y por eso precisamente te dije "construir el reporte en la vista del formulario en pantalla.".
Es lo que se hace. El SQL no crea reportes. Los programas que usan el SQL lo hacen.
Si quieres simplificarte la vida usando un especie de Report Builder para MySQL, pues simplemente tienes que buscar y pagar por uno. De lo contrario tendrás que programar para crear los que necesites.
Hay ciertos listados que se pueden generar por SQL, pero otros no, y en tu caso parece qeue deberás hacerlo por la aplicación.
__________________
¿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: join, registros, select, sql, tabla
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:16.