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

[SOLUCIONADO] Resultados repetidos en una consulta

Estas en el tema de Resultados repetidos en una consulta en el foro de Mysql en Foros del Web. Tengo estas Tablas Productos: idProducto, n_producto, descripcion, idMarcca, idCategoria Marcas idMarcca, n_marca Categorias idCategoria, n_categoria Modelos idModelo, n_modelo productos_modelos idProducto idModelo La consulta que necesito ...
  #1 (permalink)  
Antiguo 08/10/2015, 09:46
 
Fecha de Ingreso: octubre-2015
Mensajes: 11
Antigüedad: 9 años, 1 mes
Puntos: 0
Pregunta Resultados repetidos en una consulta

Tengo estas Tablas

Productos:
idProducto, n_producto, descripcion, idMarcca, idCategoria

Marcas
idMarcca, n_marca

Categorias
idCategoria, n_categoria

Modelos
idModelo, n_modelo

productos_modelos
idProducto
idModelo

La consulta que necesito debe buscar en los campos n_producto, n_categoria, n_marca, n_modelo.
La consulta yo la realice asi:

Código SQL:
Ver original
  1. SELECT p.idProducto, p.n_producto, p.descripcion, m.n_marca, c.n_categoria  
  2. FROM productos p, marcas m, categorias c, modelos mo, productos_modelos pm
  3. WHERE(mo.idModelo = pm.idModelo AND p.idProducto = pm.idProducto)
  4. AND (p.idMarca = m.idMarca AND p.idCategorias = c.idCategoria)
  5. AND (p.n_producto LIKE '%".$search."%'
  6.      OR c.n_categoria LIKE '%".$search."%'
  7.      OR m.n_marca LIKE '%".$search."%'
  8.     OR mo.n_modelo LIKE '%".$search."%')

El problema es que me repite varias veces la misma fila, tantas veces como modelos tenga relacionados con el producto. supongo que aqui dbe estar el problema >> WHERE(mo.idModelo = pm.idModelo AND p.idProducto = pm.idProducto) <<


Esta es una consulta que servirá para un buscador de mi sitio web
  #2 (permalink)  
Antiguo 08/10/2015, 10:04
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Resultados repetidos en una consulta

primero usa joins implicitos(inner join, left join) para que quieres la tabla productos_modelo? no seria mejor que dentro de la tabla productos pusieras el id_modelo???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 08/10/2015, 10:28
 
Fecha de Ingreso: octubre-2015
Mensajes: 11
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: Resultados repetidos en una consulta

Cita:
Iniciado por Libras Ver Mensaje
primero usa joins implicitos(inner join, left join) para que quieres la tabla productos_modelo? no seria mejor que dentro de la tabla productos pusieras el id_modelo???
La tabla productos_modelo es una tabla pivote que hace posible la relacion n:m entre productos - modelos, un producto puede tener varios modelos y un modelo puede estar en varios productos.

sobre el uso de join's . Me podrías dar un ejemplo de como debería ser la consulta.
Gracias
  #4 (permalink)  
Antiguo 08/10/2015, 10:36
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Resultados repetidos en una consulta

Si tus resultados se repiten es por la relacion que tienes de uno a muchos en tu tabla pivote y creo que te falto amarrar todos los datos.....

Código MySQL:
Ver original
  1. select p.idProducto, p.n_producto, p.descripcion, m.n_marca, c.n_categoria  
  2. FROM productos p
  3. inner join marcas m on (p.id_marca=m.idmarca)
  4. inner join categorias c on (c.id_categoria=p.idcategoria)
  5. inner join modelos mo on (m.idmodelo=p.idmodelo)
  6. inner join productos_modelo pm on (pm.id_producto=p.idproducto and pm.id_modelo=p.id_modelo)
  7. where (p.n_producto LIKE '%".$search."%'
  8.      OR c.n_categoria LIKE '%".$search."%'
  9.      OR m.n_marca LIKE '%".$search."%'
  10.     OR mo.n_modelo LIKE '%".$search."%')
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 08/10/2015, 11:37
 
Fecha de Ingreso: octubre-2015
Mensajes: 11
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: Resultados repetidos en una consulta

Cita:
Iniciado por Libras Ver Mensaje
Si tus resultados se repiten es por la relacion que tienes de uno a muchos en tu tabla pivote y creo que te falto amarrar todos los datos.....
Gracias amigo por tomarte el tiempo de responder:

a que te refieres con
Cita:
Iniciado por Libras Ver Mensaje
amarrar todos los datos
es un error en el diseño de las tablas
  #6 (permalink)  
Antiguo 08/10/2015, 11:41
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Resultados repetidos en una consulta

nop es un error en tu query, lo que pasa es que nada mas estas haciendo el join con el campo de modelo y no con el de productos en la tabla productos_modelo ;)


Código MySQL:
Ver original
  1. WHERE(mo.idModelo = pm.idModelo AND p.idProducto = pm.idProducto and p.idmodelo=pm.idmodelo)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 08/10/2015, 11:50
 
Fecha de Ingreso: octubre-2015
Mensajes: 11
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: Resultados repetidos en una consulta

Cita:
Iniciado por Libras Ver Mensaje
nop es un error en tu query, lo que pasa es que nada mas estas haciendo el join con el campo de modelo y no con el de productos en la tabla productos_modelo ;)


Código MySQL:
Ver original
  1. WHERE(mo.idModelo = pm.idModelo AND p.idProducto = pm.idProducto and p.idmodelo=pm.idmodelo)
No puedo hacer esta comparacion p.idmodelo=pm.idmodelo ya que la tabla productos p no tiene ningun campo idmodelo
  #8 (permalink)  
Antiguo 08/10/2015, 11:59
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Resultados repetidos en una consulta

tienes razon, la consulta que te mande regreso bien los datos??
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #9 (permalink)  
Antiguo 08/10/2015, 12:27
 
Fecha de Ingreso: octubre-2015
Mensajes: 11
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: Resultados repetidos en una consulta

No, por lo mismo de la comparacion >pm.id_modelo = p.id_modelo < que esta en ultimo inner join

este es el link de mi proyecto www.orozcomx.com/shopelectronica/index.php,
si insertas en el buscador DT01171 te da 3 veces el mismo resultado ya que hay tres modelos relacionados con este producto, ¡cosa que no deberia pasar! y si quiero agregar mas modelos a este producto ?
  #10 (permalink)  
Antiguo 08/10/2015, 13:02
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Resultados repetidos en una consulta

pon un ejemplo de tus datos para entender porque esta repitiendo la informacion.....con ejemplo de tus datos me refiero a un pequeño ejemplo de los datos de cada una de tus tablas ;)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #11 (permalink)  
Antiguo 08/10/2015, 13:27
 
Fecha de Ingreso: octubre-2015
Mensajes: 11
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: Resultados repetidos en una consulta

prodcutos:
idProducto 1
n_producto DT01171 Generico
descripcion Lámpara genérica con carcasa para video proye
idCategoria 2
idMarca 2

marcas
idMarca 2
n_marca Hitachi

categorias
idCategorias 2
n_categoria Lampara

modelos
idModelo 1
n_modelo CP-WX4021N

idModelo 2
n_modelo CP-WX5021N

idModelo 3
n_modelo CP-X4021N

idModelo 4
n_modelo CP-X5021N

idModelo 5
n_modelo HCP-4060X

productos_modelos
idProducto 1
idModelo 1

idProducto 1
idModelo 2

idProducto 1
idModelo 3

idProducto 1
idModelo 4

idProducto 1
idModelo 5
  #12 (permalink)  
Antiguo 08/10/2015, 15:31
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Resultados repetidos en una consulta

Prueba con algo como esto:

Código MySQL:
Ver original
  1. select p.idProducto, p.n_producto, p.descripcion, m.n_marca, c.n_categoria  
  2. FROM productos p
  3. inner join marcas m on (p.id_marca=m.idmarca)
  4. inner join categorias c on (c.id_categoria=p.idcategoria)
  5. inner join modelos mo on (m.idmodelo=p.idmodelo)
  6. inner join productos_modelo pm on (pm.id_producto=p.idproducto and pm.id_modelo=m.id_modelo)
  7. where (p.n_producto LIKE '%".$search."%'
  8.      OR c.n_categoria LIKE '%".$search."%'
  9.      OR m.n_marca LIKE '%".$search."%'
  10.     OR mo.n_modelo LIKE '%".$search."%')
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #13 (permalink)  
Antiguo 08/10/2015, 16:49
 
Fecha de Ingreso: octubre-2015
Mensajes: 11
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: Resultados repetidos en una consulta

No funciona , en esta consulta tambien estas comparando inner join modelos mo on (m.idmodelo=p.idmodelo) y ya habiamos comentado que la tabla productos no tiene un campo idmodelo)
  #14 (permalink)  
Antiguo 08/10/2015, 16:53
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Resultados repetidos en una consulta

Código MySQL:
Ver original
  1. select p.idProducto, p.n_producto, p.descripcion, m.n_marca, c.n_categoria  
  2. FROM productos_modelo pm
  3. inner join productos as p on (p.idproducto=pm.idproducto)
  4. inner join modelos mo on (m.idmodelo=pm.idmodelo)
  5. inner join marcas m on (p.id_marca=m.idmarca)
  6. inner join categorias c on (c.id_categoria=p.idcategoria)
  7. where (p.n_producto LIKE '%".$search."%'
  8.      OR c.n_categoria LIKE '%".$search."%'
  9.      OR m.n_marca LIKE '%".$search."%'
  10.     OR mo.n_modelo LIKE '%".$search."%')
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #15 (permalink)  
Antiguo 09/10/2015, 10:35
 
Fecha de Ingreso: octubre-2015
Mensajes: 11
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: Resultados repetidos en una consulta

Ya la ejecute solo corregí algunos nombres de campos.
Pero el resultado sigue siendo el mismo.

me da 6 Veces el mismo producto, supongo que es porque hay seis modelos relacionados a este producto? Pero para mi buscador solo requiero que me de 1vez cada producto

  #16 (permalink)  
Antiguo 09/10/2015, 10:44
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Resultados repetidos en una consulta

pues hazle un distinct al final:

Código SQL:
Ver original
  1. SELECT DISTINCT * FROM(
  2. SELECT p.idProducto, p.n_producto, p.descripcion, m.n_marca, c.n_categoria  
  3. FROM productos_modelo pm
  4. INNER JOIN productos AS p ON (p.idproducto=pm.idproducto)
  5. INNER JOIN modelos mo ON (m.idmodelo=pm.idmodelo)
  6. INNER JOIN marcas m ON (p.id_marca=m.idmarca)
  7. INNER JOIN categorias c ON (c.id_categoria=p.idcategoria)
  8. WHERE (p.n_producto LIKE '%".$search."%'
  9.      OR c.n_categoria LIKE '%".$search."%'
  10.      OR m.n_marca LIKE '%".$search."%'
  11.     OR mo.n_modelo LIKE '%".$search."%')
  12. ) AS completa
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #17 (permalink)  
Antiguo 09/10/2015, 11:55
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Resultados repetidos en una consulta

Cita:
Iniciado por lunamunivepablo Ver Mensaje
Ya la ejecute solo corregí algunos nombres de campos.
Pero el resultado sigue siendo el mismo.

me da 6 Veces el mismo producto, supongo que es porque hay seis modelos relacionados a este producto? Pero para mi buscador solo requiero que me de 1vez cada producto

Una pregunta: Si lo que quieres es el listado de PRODUCTOS, ¿para que estas invocando la tabla de MODELOS?
Si tu consulta no usará datos de los modelos, es innecesario, y si es para asegurarte que existan modelos, no la necesitas en el FROM.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #18 (permalink)  
Antiguo 09/10/2015, 12:15
 
Fecha de Ingreso: octubre-2015
Mensajes: 11
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: Resultados repetidos en una consulta

Gracias gnzsoloyo por interesarte en mi problema.
Tienes razon, en el select no estoy solicitando los nombres de los modelos, pero si lo hago el el al final de la consulta, OR mo.n_modelo LIKE '%".$search."%'.

La idea es que si yo ingreso en el buscador algun modelo y este existe en mi BD lo que me devuelva seria solo el producto que esta relacionado al modelo.
  #19 (permalink)  
Antiguo 09/10/2015, 13:01
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Resultados repetidos en una consulta

Probemos:
Código SQL:
Ver original
  1. SELECT
  2.     p.idProducto,
  3.     p.n_producto,
  4.     p.descripcion,
  5.     m.n_marca,
  6.     c.n_categoria  
  7. FROM productos_modelo pm
  8.     INNER JOIN productos AS p ON p.idproducto=pm.idproducto
  9.     INNER JOIN marcas m ON p.id_marca=m.idmarca
  10.     INNER JOIN categorias c ON c.id_categoria=p.idcategoria
  11. WHERE p.n_producto LIKE '%".$search."%'
  12.      OR c.n_categoria LIKE '%".$search."%'
  13.      OR m.n_marca LIKE '%".$search."%'
  14.     OR EXISTS
  15.         (SELECT 1 FROM modelos
  16.         WHERE m.idmodelo=pm.idmodelo AND n_modelo LIKE '%".$search."%')
No funcionará si cada producto tiene más de una marca...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #20 (permalink)  
Antiguo 09/10/2015, 13:20
 
Fecha de Ingreso: octubre-2015
Mensajes: 11
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: Resultados repetidos en una consulta

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Probemos:
Código SQL:
Ver original
  1. SELECT
  2.     p.idProducto,
  3.     p.n_producto,
  4.     p.descripcion,
  5.     m.n_marca,
  6.     c.n_categoria  
  7. FROM productos_modelo pm
  8.     INNER JOIN productos AS p ON p.idproducto=pm.idproducto
  9.     INNER JOIN marcas m ON p.id_marca=m.idmarca
  10.     INNER JOIN categorias c ON c.id_categoria=p.idcategoria
  11. WHERE p.n_producto LIKE '%".$search."%'
  12.      OR c.n_categoria LIKE '%".$search."%'
  13.      OR m.n_marca LIKE '%".$search."%'
  14.     OR EXISTS
  15.         (SELECT 1 FROM modelos
  16.         WHERE m.idmodelo=pm.idmodelo AND n_modelo LIKE '%".$search."%')
No funcionará si cada producto tiene más de una marca...

Ya lo probé pero da el mismo resultado.
Seguire buscando y probando los consejos que me puedan ofrecer.
  #21 (permalink)  
Antiguo 09/10/2015, 13:25
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Resultados repetidos en una consulta

OK, el problema entonces es CON LOS DATOS, no con las consultas. Es difícil darte una solucion práctica sin conocer los datos reales de las tablas y qué cardinalidad tienen.
Vamos a suponer que Productos, contiene productos DIFERENTES.
¿ok?

¿Cuantas marcas puede haber por cada producto? (minimo y máximo)
¿Cuantos modelos puede haber por producto?

Código MySQL:
Ver original
  1.     p.idProducto,
  2.     p.n_producto,
  3.     p.descripcion,
  4.     m.n_marca,
  5.     c.n_categoria  
  6. FROM productos AS p
  7.     INNER JOIN marcas m ON p.id_marca=m.idmarca
  8.     INNER JOIN categorias c ON c.id_categoria=p.idcategoria
  9. WHERE p.n_producto LIKE '%".$search."%'
  10.      OR c.n_categoria LIKE '%".$search."%'
  11.      OR m.n_marca LIKE '%".$search."%'
  12.     OR EXISTS
  13.         (SELECT 1 FROM modelos
  14.       INNER JOIN productos_modelo pm ON m.idmodelo=pm.idmodelo
  15.         WHERE pm.idproducto = p.idproducto AND n_modelo LIKE '%".$search."%')
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #22 (permalink)  
Antiguo 09/10/2015, 14:30
 
Fecha de Ingreso: octubre-2015
Mensajes: 11
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: Resultados repetidos en una consulta

Gracias gnzsoloyo
esta consulta si me funciono como queria,
Ya estaba pensando que lo que queria hacer era imposible. Me han regresado la esperanza Gracias

Etiquetas: 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

SíEste tema le ha gustado a 2 personas




La zona horaria es GMT -6. Ahora son las 14:22.