![]() |
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. |
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. |
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 |
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. |
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 ) |
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á. |
Respuesta: Hacer un inner join pero que no devuelva varias filas ok, muchas gracias |
Respuesta: Hacer un inner join pero que no devuelva varias filas hola amigos podrian poner un ejemplo del query como quedo saludos y gracias |
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.