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

consultas avanzadas

Estas en el tema de consultas avanzadas en el foro de Mysql en Foros del Web. Existe en mysql la posiblidad de hacer esto: Tabla 1 (amigos) id, nombre 1, juan 2, pedro 3, luis Tabla 2 (gustos) id, descrip 1, ...
  #1 (permalink)  
Antiguo 18/01/2013, 11:08
 
Fecha de Ingreso: febrero-2004
Ubicación: Guatemala
Mensajes: 117
Antigüedad: 20 años, 2 meses
Puntos: 2
consultas avanzadas

Existe en mysql la posiblidad de hacer esto:

Tabla 1 (amigos)
id, nombre
1, juan
2, pedro
3, luis

Tabla 2 (gustos)
id, descrip
1, deporte
2, literatura
3, viajar

Tabla 3 (gustos de amigos )
id_amigo, id_gusto
1, 1
1, 2
2, 1
3, 3

Regularmente con los joins obtengo un registro por cada gusto de cada amigo, puedo obtener algo asi

juan, deporte, literatura
pedro, deporte
luis, viajar

Gracias. Si esto es posible ¿saben de algun manual o link que explique sobre esto?
  #2 (permalink)  
Antiguo 18/01/2013, 11:41
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: consultas avanzadas

Hola jluishg:

Puedes usar la función GROUP_CONCAT, sería más o menos así

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +--------+------------+
  3. | nombre | gusto      |
  4. +--------+------------+
  5. | juan   | deporte    |
  6. | juan   | literatura |
  7. | pedro  | deporte    |
  8. | luis   | viajar     |
  9. +--------+------------+
  10. 4 rows in set (0.00 sec)
  11.  
  12. mysql> SELECT nombre, GROUP_CONCAT(gusto)
  13.     -> FROM tabla GROUP BY nombre;
  14. +--------+---------------------+
  15. | nombre | GROUP_CONCAT(gusto) |
  16. +--------+---------------------+
  17. | juan   | deporte,literatura  |
  18. | luis   | viajar              |
  19. | pedro  | deporte             |
  20. +--------+---------------------+
  21. 3 rows in set (0.00 sec)

Saludos
Leo.
  #3 (permalink)  
Antiguo 18/01/2013, 11:46
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: consultas avanzadas

dos opciones, bueno hay alguna más, pero yo te recomiendo estas:
1) hacerlo con programación. Te traes el array de la base de datos y al recorrer el ciclo escribes o no el nombre y haces saltar o no la línea. Para esto pide ayuda en el foro de tu programa.
2) Si la lista de gustos de una persona no es muy larga, yo usaría GROUP_CONCAT
Código MySQL:
Ver original
  1.      a.nombre
  2.      GROUP_CONCAT(g.descrip) gustos
  3.   FROM amigos a INNER JOIN gustosdeamigos ga ON a.id = ga.id_amigo
  4.      INNER JOIN gustos g ON ga.id_gusto = g.id
  5.  GROUP BY ga.id_amigo

Última edición por jurena; 18/01/2013 a las 11:47 Razón: perdón, se adelantó leonardo

Etiquetas: join, 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 04:24.