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

Problema con duplicado de resultados en query

Estas en el tema de Problema con duplicado de resultados en query en el foro de Mysql en Foros del Web. Hola gente como va, tengo una consulta media compleja, y en la opcion que le doy de GROUP_CONCAT hay algo raro o puede ser otra ...
  #1 (permalink)  
Antiguo 06/07/2012, 10:44
 
Fecha de Ingreso: abril-2009
Mensajes: 13
Antigüedad: 15 años
Puntos: 0
Problema con duplicado de resultados en query

Hola gente como va, tengo una consulta media compleja, y en la opcion que le doy de GROUP_CONCAT hay algo raro o puede ser otra cosa, el problema es que me duplica por asi decirlo el resultado, y necesito que me lo muestre una sola vez...

la sentencia es la siguiente
Código MySQL:
Ver original
  1. vcc.id, vcc.id_coche, GROUP_CONCAT(va.nombre_apellido, ', ' ,va.tipop, ', ' ,va.dni SEPARATOR '
  2. ') as adicional ,GROUP_CONCAT(vr.nombre, ' ' ,vr.apellido, ', ' ,vr.dni SEPARATOR '
  3. ') as alumnos , vc.marca, vc.dominio
  4. FROM viajes_adicionales va
  5. LEFT JOIN viajes_coches_carga vcc ON FIND_IN_SET(va.id, vcc.id_adicionales)
  6. INNER JOIN viajes_registrados vr
  7. ON  FIND_IN_SET(vr.id, vcc.id_alumnos)
  8. INNER JOIN  viajes_coches vc ON  vc.id = vcc.id_coche

y el resultado es este.
[URL=http://imageshack.us/photo/my-images/256/testzj.jpg/][IMG]http://img256.imageshack.us/img256/8090/testzj.jpg[/IMG][/URL]

necesito que se vea 1 sola vez cada registro, no 2.

se me quemaron los libros jeje a lo mejor hay otra forma de hacerlo. se agradece (:
  #2 (permalink)  
Antiguo 10/07/2012, 11:36
 
Fecha de Ingreso: mayo-2012
Mensajes: 32
Antigüedad: 12 años
Puntos: 1
Respuesta: Problema con duplicado de resultados en query

Hola tal vez si explicas un poco como son tus tablas y pongas algunos datos de ejmplo podamos ayudarte
  #3 (permalink)  
Antiguo 10/07/2012, 11: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, 5 meses
Puntos: 2658
Respuesta: Problema con duplicado de resultados en query

SI limpio un poco tu código y lo presento más estructurado me queda esto:
Código MySQL:
Ver original
  1.     vcc.id, vcc.id_coche,
  2.     GROUP_CONCAT(va.nombre_apellido, ', ' ,va.tipop, ', ' ,va.dni SEPARATOR '') adicional ,
  3.     GROUP_CONCAT(vr.nombre, ' ' ,vr.apellido, ', ' ,vr.dni SEPARATOR ' ') alumnos ,
  4.     vc.marca,
  5.     vc.dominio
  6.     viajes_adicionales va
  7.     LEFT JOIN viajes_coches_carga vcc ON FIND_IN_SET(va.id, vcc.id_adicionales)
  8.     INNER JOIN viajes_registrados vr ON  FIND_IN_SET(vr.id, vcc.id_alumnos)  
  9.     INNER JOIN  viajes_coches vc ON  vc.id = vcc.id_coche;

Entonces podemos ver algo notable...
Esta es la segunda vez que veo que alguien quiere usar FIND_IN_SET() en un LEFT o INNER JOIN, y francamente no comprendo por qué piensan que sirve...
Esa es una función de cadena que devuelve un valor entero superior a cero que indica la posición de un valor de cadena (primer parámetro) dentro de una cadena de texto con valores separados por comas.
En el contexto de un JOIN no es una buena elección, porque la idea del JOIN es relacionar cada valor de un campo de una tabla, contra el valor de otro campo de otra tabla. Pero en ningún momento se habla de que busque uno entre un conjunto de valores...
El resultado de eso puede ser errático, porque contradice la lógica de un JOIN.
Además, el hecho de que estés usando ambos parámetros como provenientes de dos tablas distintas, y siendo que el segundo debería ser una cadena que contenga más de un valor, me lleva a pensar que esa tabla tiene un campo multivaluado de tipo VARCHAR, donde guardas una colección de valores en cada uno de sus registros... Y eso sí es una transgresión violenta al modelo E-R, a la consistencia de datos, a la integridad referencial y sin dudas a las reglas de normalización.
Digo esto, porque es regla absoluta que un campo en un mismo registro sólo debe contener un único valor atómico, y no más de uno.
Así pues, ¿tiene esa columna más de un valor o tiene uno sólo por registro?
Si es lo primero, el JOIN está mal escrito. Si es lo segundo, el diseño de las tablas está mal.
Eso es lo primero que hay que resolver.
La consulta vendrá después (e incluso puede resolverse sola, al corregir las cosas).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: php, sql
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 11:47.