Ver Mensaje Individual
  #7 (permalink)  
Antiguo 28/06/2013, 11:49
marisolphp
 
Fecha de Ingreso: mayo-2012
Mensajes: 32
Antigüedad: 12 años
Puntos: 1
Respuesta: Algunos registros repetidos en consulta

Cita:
Iniciado por max_mouse699 Ver Mensaje
Hola marisolphp.

Muchas gracias por tu respuesta, la probe y el filtyrado de informacion me funciona, tu manera es mas simple, la mia tambien funcionaba pero era mas compleja.

Pero el problema ahora retoma al verdadero titulo del tema. Lo que sucede es que si quito la condicion WHERE con todos sus campos, me muestra solo dos articulos como resultado de la consulta, y debo entender que esos dos articulos, son solo los articulos que tienen asociada alguna etiqueta, los que no tiene asociado etiqueta, no los muestra.

La consulta ahora es como poder mostrar todos los articulos, esto quiere decir, los que estan con etiquetas y los que estan sin etiqueta ?
OJO: cuando yo realice la consulta en un comienzo, en el primer post menciono lo que me ocurre, que se me repiten registros de los articulos que no tienen ninguna asociacion con etiqueta:



De antemano muchas gracias.
Saludos.
Ahh si lo que quieres es que muestre todos tus articulos y aparte las etiquetas de solo cierto nombre creo que la consulta si sería con left join algo así

Código MySQL:
Ver original
  1.             bodfam.descripcion AS familia,
  2.             bodestart.descripcion AS 'nombre_estado_articulo',
  3.             bum.descripcion AS unidad_medida,
  4.             bodmar.descripcion AS marca,
  5.             bodmod.descripcion AS modelo,
  6.             bodart.*
  7.         FROM bdsistema.bodega_articulo bodart
  8.         LEFT JOIN bdsistema.bodega_familia bodfam ON bodfam.id_interno = bodart.id_familia
  9.         LEFT JOIN bdsistema.bodega_unidad_medida bum ON bum.id_interno = bodart.id_unidad
  10.         LEFT JOIN bdsistema.bodega_marca bodmar ON bodmar.id_interno = bodart.id_marca
  11.         LEFT JOIN bdsistema.bodega_modelo bodmod ON bodmod.id_interno = bodart.id_modelo
  12.         LEFT JOIN bdsistema.bodega_estado bodestart ON bodestart.id_interno = bodart.estado_articulo and INSTR(bodeti.descripcion, 'carroceria') > 0
  13.         left JOIN bdsistema.bodega_etiqueta_articulo bodetiart ON bodetiart.id_articulo = bodart.id_interno
  14.         left JOIN bdsistema.bodega_etiquetas bodeti ON bodeti.id_interno = bodetiart.id_etiqueta

si ves el filtro realmente iría en el left join de la tabla de etiquetas

Otra forma sería un left join con un select, algo así:

Código MySQL:
Ver original
  1.             bodfam.descripcion AS familia,
  2.             bodestart.descripcion AS 'nombre_estado_articulo',
  3.             bum.descripcion AS unidad_medida,
  4.             bodmar.descripcion AS marca,
  5.             bodmod.descripcion AS modelo,
  6.             bodart.*
  7.         FROM bdsistema.bodega_articulo bodart
  8.         LEFT JOIN bdsistema.bodega_familia bodfam ON bodfam.id_interno = bodart.id_familia
  9.         LEFT JOIN bdsistema.bodega_unidad_medida bum ON bum.id_interno = bodart.id_unidad
  10.         LEFT JOIN bdsistema.bodega_marca bodmar ON bodmar.id_interno = bodart.id_marca
  11.         LEFT JOIN bdsistema.bodega_modelo bodmod ON bodmod.id_interno = bodart.id_modelo
  12.         LEFT JOIN  bdsistema.bodega_estado bodestart
  13.  ON bodestart.id_interno = bodart.estado_articulo and
  14.         left JOIN (select * from
  15. bdsistema.bodega_etiqueta_articulo bodetiart
  16.  inner JOIN bdsistema.bodega_etiquetas bodeti ON bodeti.id_interno = bodetiart.id_etiqueta
  17. where INSTR(bodeti.descripcion, 'carroceria') > 0) as tablaeti
  18. ON tablaeti.id_articulo = bodart.id_interno

Lo que importa es que primero tienes que filtrar la tabla de las etiquetas y luego ligarla con tu tabla de articulos