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

Consulta Mysql relacion mucho a mucho

Estas en el tema de Consulta Mysql relacion mucho a mucho en el foro de Mysql en Foros del Web. Hoy les pido su ayuda para hacer una consulta.. tengo estas 2 tablas llamada contacto con los campos idcontacto .....clave primaria nombre grupos con los ...
  #1 (permalink)  
Antiguo 21/05/2013, 18:43
Avatar de randy05  
Fecha de Ingreso: agosto-2012
Mensajes: 37
Antigüedad: 12 años, 3 meses
Puntos: 1
Consulta Mysql relacion mucho a mucho

Hoy les pido su ayuda para hacer una consulta..

tengo estas 2 tablas llamada

contacto con los campos

idcontacto .....clave primaria
nombre

grupos con los campos

idgrupo .....clave primaria
grupo

lo que neseito hacer es una consula que me devuelva todos los regitros de la tabla contacto que me traiga el idcontacto, el nombre, y el grupo o los grupos al que pertenece cada contacto.


estube inbestigando un poco y me dice que tengo que crear una 3era tabla para relacionarlas
asi que ise esta

contacto_grupo con los campos

idcontaco ........foranea a la tabla contacto
idgrupo ........foranea a la tabla grupos


hasta aqui es lo que se hacer hasta el momento si haguien save como hacer la consulta por favor me ayude
  #2 (permalink)  
Antiguo 22/05/2013, 00:35
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 8 meses
Puntos: 300
Respuesta: Consulta Mysql relacion mucho a mucho

entiendo que todo contacto está en un grupo. He empleado el alias nombregrupo para nombre de grupo por si tienes luego que recuperarlo con programación, aunque para mostrarlo en una consulta no sería necesario.
Código MySQL:
Ver original
  1.  c.idcontacto,
  2.  c.nombre,
  3.  g.idgrupo,
  4.  c.nombre nombregrupo
  5. FROM contacto c
  6.  INNER JOIN contacto_grupo cg ON c.idcontacto = cg.idcontacto
  7.  INNER JOIN grupos g ON cg.idgrupo = g.idgrupo
  #3 (permalink)  
Antiguo 22/05/2013, 07:35
Avatar de randy05  
Fecha de Ingreso: agosto-2012
Mensajes: 37
Antigüedad: 12 años, 3 meses
Puntos: 1
Respuesta: Consulta Mysql relacion mucho a mucho

Pero esa consulta me devuleve Ejemplo..
Si tengo un contato que pertenece a 5 grupus me devuleve 5 registro

nombre grupos
juan arte
juan cine
juan tarea
juan profesor
juan clase

Lo que quiero hacer es que me devuelva un solo registro con todos los grupos de ese contacto

no ce si eso se hace en mysql o es en el php.
  #4 (permalink)  
Antiguo 22/05/2013, 07:52
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 11 meses
Puntos: 447
Respuesta: Consulta Mysql relacion mucho a mucho

Hola randy05:

podrías hacer uso de la función GROUP_CONCAT la cual te regresa una cadena separada por comas con todos los elementos agrupados, supongamos que tus tablas tienen más o menos los siguientes datos:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM contacto;
  2. +------------+--------+
  3. | idcontacto | nombre |
  4. +------------+--------+
  5. |          1 | juan   |
  6. |          2 | leo    |
  7. +------------+--------+
  8. 2 rows in set (0.00 sec)
  9.  
  10. mysql> SELECT * FROM grupos;
  11. +---------+----------+
  12. | idgrupo | grupo    |
  13. +---------+----------+
  14. |       1 | arte     |
  15. |       2 | cine     |
  16. |       3 | tarea    |
  17. |       4 | profesor |
  18. |       5 | clase    |
  19. +---------+----------+
  20. 5 rows in set (0.00 sec)
  21.  
  22. mysql> SELECT * FROM contacto_grupo;
  23. +------------+---------+
  24. | idcontacto | idgrupo |
  25. +------------+---------+
  26. |          1 |       1 |
  27. |          1 |       2 |
  28. |          1 |       3 |
  29. |          1 |       4 |
  30. |          1 |       5 |
  31. |          2 |       2 |
  32. |          2 |       4 |
  33. +------------+---------+
  34. 7 rows in set (0.03 sec)

Tu podrías hacer lo siguiente:

Código MySQL:
Ver original
  1. mysql> SELECT
  2.     ->   c.idcontacto,
  3.     ->   c.nombre,
  4.     ->   GROUP_CONCAT(g.grupo)
  5.     -> FROM contacto c
  6.     ->   INNER JOIN contacto_grupo cg ON c.idcontacto = cg.idcontacto
  7.     ->   INNER JOIN grupos g ON cg.idgrupo = g.idgrupo
  8.     -> GROUP BY c.idcontacto, c.nombre;
  9. +------------+--------+--------------------------------+
  10. | idcontacto | nombre | GROUP_CONCAT(g.grupo)          |
  11. +------------+--------+--------------------------------+
  12. |          1 | juan   | tarea,profesor,clase,arte,cine |
  13. |          2 | leo    | cine,profesor                  |
  14. +------------+--------+--------------------------------+
  15. 2 rows in set (0.03 sec)

Esta sería una idea, espero que te sirva.

Saludos
Leo.

Etiquetas: campo, relacion, 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:50.