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

Hacer un inner join pero que no devuelva varias filas

Estas en el tema de Hacer un inner join pero que no devuelva varias filas en el foro de Mysql en Foros del Web. Buenos dias tengo el siguiente problema con un inner join. tengo dos tablas intercambio_idioma ID_usuario_intercambio fecha_registro en esta tabala meto los usuarios de intercambio idioma ...
  #1 (permalink)  
Antiguo 13/05/2008, 09:48
Avatar de mafima  
Fecha de Ingreso: abril-2003
Ubicación: Medellin-Colombia
Mensajes: 1.109
Antigüedad: 21 años
Puntos: 24
Hacer un inner join pero que no devuelva varias filas

Buenos dias tengo el siguiente problema con un inner join.

tengo dos tablas

intercambio_idioma
ID_usuario_intercambio
fecha_registro

en esta tabala meto los usuarios de intercambio idioma


intercambio_idioma_aprender
ID_usuario_intercambio_aprender
ID_idioma_aprender

Quiero seleccionar el ID_usuario_intercambio y el ID_idioma de la tabla intercambio_idioma_aprender.

Lo que sucede es que la tabla 'intercambio_idioma_aprender' puede tener varios idiomas para el mismo usuario entonces para una cosnulta con INNER JOIN asi:



select ID_usuario_intercambio, ID_idioma_aprender FROM intercambio_idioma INNER JOIN intercambio_idioma_aprender ON intercambio_idioma.ID_usuario_intercambio=intercam bio_idioma_aprender.ID_usuario_intercambio_aprende r


me arroja un resultado mas o menos asi:

ID_usuario_intercambio | ID_idioma_aprender
43 1
43 37
88 2
22 3
22 5
22 4


pero quiciera obtener un resultado asi:


ID_usuario_intercambio | ID_idioma_aprender | ID_idioma_aprender | ID_idioma_aprender
43 1 37
88 2
22 3 5 4


quiero hacerlo asi por que luego puedo tomar los resultados con mysql_fetch_assoc, o que me aconsejan ustedes?

Por su tiempo muchas gracias.
__________________
SEO en Medellin

Última edición por mafima; 13/05/2008 a las 09:55
  #2 (permalink)  
Antiguo 13/05/2008, 10:27
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Re: Hacer un inner join pero que no devuelva varias filas

Si lo quieres hacer en MySQL, obtendrás dos campos, uno con el id del usuario y otro con los distintos id de los idiomas separados con el separador que quieras (en el ejemplo, un espacio en blanco). Para eso se usa GROUP_CONCAT del campo que quieras reunir y GROUP BY del campo que sirve para agrupar, en tu caso el ID de usuario.

select ID_usuario_intercambio, GROUP_CONCAT (CAST (ID_idioma_aprender AS CHAR), ORDER BY ID_idioma_aprender, SEPARATOR ' ') AS idiomas FROM intercambio_idioma INNER JOIN intercambio_idioma_aprender ON intercambio_idioma.ID_usuario_intercambio=intercam bio_idioma_aprender.ID_usuario_intercambio_aprende r GROUP BY ID_usuario_intercambio

De todas formas, existen otras opciones con PHP mediante uso de matrices, etc. Pregunta en ese foro si no te satisface esta solución.

Última edición por jurena; 13/05/2008 a las 11:04
  #3 (permalink)  
Antiguo 13/05/2008, 12:57
Avatar de mafima  
Fecha de Ingreso: abril-2003
Ubicación: Medellin-Colombia
Mensajes: 1.109
Antigüedad: 21 años
Puntos: 24
Re: Hacer un inner join pero que no devuelva varias filas

eso he hecho pero el moderador traslado el mensaje erroneamente, al parecer no cree que hayan varias soluciones para un mismo problemas.

:(

muchas gracias pro tu ayuda
__________________
SEO en Medellin
  #4 (permalink)  
Antiguo 13/05/2008, 13:56
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Re: Hacer un inner join pero que no devuelva varias filas

El moderador sabe lo que hace, mafima, el problema es cómo lo has planteado en PHP. Pide ayuda para manejar una carga de datos en una matriz y para luego agrupar esos datos desde dentro de la matriz.
  #5 (permalink)  
Antiguo 14/05/2008, 09:57
Avatar de mafima  
Fecha de Ingreso: abril-2003
Ubicación: Medellin-Colombia
Mensajes: 1.109
Antigüedad: 21 años
Puntos: 24
Re: Hacer un inner join pero que no devuelva varias filas

Es que si lo hago solo con matrices consumiria mucho espacio en memoria, porque los resultados facilmente superan los 10000 registros, y para meterlos en diferentes vectores y reorganizarlos seria muy lento y poco optimo.

es por ello que pregunte directamente por una funcion alternativa a mysql_fetch_assoc

y no se como plantearlo de manera diferente, porque para que los del foro de PHP me entiendan que es lo que quiero hacer debo de poner el codigo SQL para ver si hay alguna funcion de PHP que me agrupe directamente lo que saco de una base de datos agrupado por GROUP BY. ( ya que myslq_fetch_assoc o mysql_fetch_array no lo hacen )
__________________
SEO en Medellin
  #6 (permalink)  
Antiguo 14/05/2008, 12:54
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Re: Hacer un inner join pero que no devuelva varias filas

mafima,

si lo que quieres es recoger en PHP eso, es decir el dato que te muestra el GROUP_CONCAT, es muy simple: a la consulta SQL le pones un alias tras el group_concat(...) AS idiomas. De hecho, creo que te puse ese alias para que lo vieras. Luego en php cargas ese alias como si del nombre de un campo se tratase. Ya sabes, mysql_fetch_array... etc., y luego muestras la lista con $row['idiomas']. Y ya está.

Última edición por jurena; 18/05/2008 a las 01:13
  #7 (permalink)  
Antiguo 16/05/2008, 14:26
Avatar de mafima  
Fecha de Ingreso: abril-2003
Ubicación: Medellin-Colombia
Mensajes: 1.109
Antigüedad: 21 años
Puntos: 24
Respuesta: Hacer un inner join pero que no devuelva varias filas

ok, muchas gracias
__________________
SEO en Medellin
  #8 (permalink)  
Antiguo 04/12/2008, 17:58
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Pregunta Respuesta: Hacer un inner join pero que no devuelva varias filas

hola amigos podrian poner un ejemplo del query como quedo

saludos y gracias
__________________
gerardo
  #9 (permalink)  
Antiguo 05/12/2008, 02:54
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Hacer un inner join pero que no devuelva varias filas

Chalchis,

creo que este el query al que te refieres:
select ID_usuario_intercambio, GROUP_CONCAT (CAST (ID_idioma_aprender AS CHAR), ORDER BY ID_idioma_aprender, SEPARATOR ' ') AS idiomas FROM intercambio_idioma INNER JOIN intercambio_idioma_aprender ON intercambio_idioma.ID_usuario_intercambio=intercam bio_idioma_aprender.ID_usuario_intercambio_aprende r GROUP BY ID_usuario_intercambio

mira el uso de GROUP_CONCAT() en el manual de MySQL.

Última edición por jurena; 05/12/2008 a las 04:46
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 19:02.