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

Ayuda con consulta que repite datos.

Estas en el tema de Ayuda con consulta que repite datos. en el foro de Mysql en Foros del Web. ....:::: Solucionado ::::.... Que tal amigos del foro: Necesito de su valiosa ayuda para resolver un problema que tengo al hacer una consulta a la ...
  #1 (permalink)  
Antiguo 23/05/2010, 21:02
 
Fecha de Ingreso: mayo-2010
Mensajes: 2
Antigüedad: 13 años, 11 meses
Puntos: 0
De acuerdo Ayuda con consulta que repite datos.

....:::: Solucionado ::::....

Que tal amigos del foro:

Necesito de su valiosa ayuda para resolver un problema que tengo al hacer una consulta a la base de datos.

Para esta consulta intervienen 3 tablas.

1.- servidor (no voy a poner todos los campos):
*nombreServidor (llave primaria)
*ip
*sistemaOperativo

2.- r_servsoft (transitiva):
*c_Software_id_Software (llave primaria de la tabla c_software)
*servidor_nombreServidor (llave primaria de la tabla servidor)

3.- c_software:
*id_Software
*ds_Software

Bueno, la transitiva responde a que un servidor puede tener "n" cantidad de software instalado y un software puede estar en "n" cantidad de servidores.

Ahora, el query que utilizo es el siguiente:

SELECT
servidor.*,
c_software.ds_Software
FROM
servidor
INNER JOIN
r_servsoft
ON
servidor.nombreServidor = r_servsoft.servidor_nombreServidor
INNER JOIN
c_software
ON
r_servsoft.c_Software_id_Software = c_Software.id_Software
WHERE
servidor.sistemaOperativo = "Sistema Operativo X"


Y el resultado que obtengo es el siguiente (solo pondre algunos de los campos):

Nombre del servidor -- IP -- Sistema Operativo -- Software Instalado.
BD-007-AP -- 1.1.1.1 -- Sistema Operativo X -- SW1
BD-007-AP -- 1.1.1.1 -- Sistema Operativo X -- SW2
BD-007-AP -- 1.1.1.1 -- Sistema Operativo X -- SW3


En teoria esta bien, el servidor BD-007-AP tiene instalado 3 software's.
Pero, hay alguna manera en que SW1 SW2 y SW3 queden en un solo campo? por que por cada software que encuentra asignado al servidor me trae todos los demas datos (nombre, ip, sistema operativo, etc, etc), si un servidor llegara a tener 10 software's me va a trae 10 veces los mismos datos a excepcion de la ultima columna

El resultado deseado seria:
Nombre del servidor -- IP -- Sistema Operativo -- Software Instalado.
BD-007-AP -- 1.1.1.1 -- Sistema Operativo X -- SW1 - SW2 - SW3


Muchas gracias por leer este mensaje.

Pd. Estoy trabajando con PHP y MySQL.

Última edición por finishday; 25/05/2010 a las 12:37
  #2 (permalink)  
Antiguo 23/05/2010, 21:57
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Ayuda con consulta que repite datos.

El problema se resuelve usando GROUP_CONCAT():
Código MySQL:
Ver original
  1.     servidor.*,
  2.     GROUP_CONCAT(CS.ds_Software) ds_Software
  3.     servidor S
  4.     INNER JOIN r_servsoft RS ON S.nombreServidor = RS.servidor_nombreServidor
  5.     INNER JOIN c_software CS ON RS.c_Software_id_Software = CS.id_Software
  6.     S.sistemaOperativo = "Sistema Operativo X"
  7. GROUP BY S.nombreServidor ;
Trata de usar alias para reducir el uso de nombres muy extensos en las sentencias. Facilita la lectura.
Usa las etiquetas de Highlight que están en el comboBox, de esa forma se vuelve más legibe.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 25/05/2010, 12:34
 
Fecha de Ingreso: mayo-2010
Mensajes: 2
Antigüedad: 13 años, 11 meses
Puntos: 0
De acuerdo Respuesta: Ayuda con consulta que repite datos.

Muchas gracias por tu ayuda gnzsolyo ... Yo ya andaba solucionandolo con PHP pero todas mis lineas de codigo se redujeron a solo un GROUP_CONCAT
Por fin pude avanzar jajaja ...

Gracias. Saludos desde México.

Etiquetas: join, transitiva
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 23:59.