Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Mysql (http://www.forosdelweb.com/f86/)
-   -   Hacer un inner join pero que no devuelva varias filas (http://www.forosdelweb.com/f86/hacer-inner-join-pero-que-no-devuelva-varias-filas-585930/)

mafima 13/05/2008 09:48

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.

jurena 13/05/2008 10:27

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.

mafima 13/05/2008 12:57

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

jurena 13/05/2008 13:56

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.

mafima 14/05/2008 09:57

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 )

jurena 14/05/2008 12:54

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á.

mafima 16/05/2008 14:26

Respuesta: Hacer un inner join pero que no devuelva varias filas
 
ok, muchas gracias

chalchis 04/12/2008 17:58

Respuesta: Hacer un inner join pero que no devuelva varias filas
 
hola amigos podrian poner un ejemplo del query como quedo

saludos y gracias

jurena 05/12/2008 02:54

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.


La zona horaria es GMT -6. Ahora son las 07:59.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.