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

Problema consulta

Estas en el tema de Problema consulta en el foro de Mysql en Foros del Web. Hola a todos. Tengo una consulta SQL. Si la ejecuto, no muestra resultados. Si la ejecuto con los condicionantes separados SI muestran resultados Y he ...
  #1 (permalink)  
Antiguo 25/09/2013, 06:06
Avatar de el_javi  
Fecha de Ingreso: marzo-2005
Ubicación: MAdrid
Mensajes: 844
Antigüedad: 19 años
Puntos: 10
Problema consulta

Hola a todos.

Tengo una consulta SQL.

Si la ejecuto, no muestra resultados.

Si la ejecuto con los condicionantes separados SI muestran resultados

Y he revisado y SI hay resultados combinados.

SQL principal
Código MySQL:
Ver original
  1. SELECT t_products.*, t_categories.*, t_products_filters.*
  2. FROM t_products
  3. LEFT JOIN t_categories ON t_products.CATEGORY_ID = t_categories.CATEGORY_ID
  4. LEFT JOIN t_products_filters ON t_products.PRODUCT_ID = t_products_filters.PRODUCT_ID
  5. WHERE t_products.PRODUCT_options_erased=0
  6. AND t_categories.CATEGORY_area = 'particular'
  7. AND t_products_filters.PRODUCTFILTER_options = '95'
  8. AND t_products_filters.PRODUCTFILTER_options = '96'
  9. GROUP BY t_products.PRODUCT_ID ORDER BY t_products.PRODUCT_ID DESC
si ejecuto esto:

Código MySQL:
Ver original
  1. SELECT t_products.*, t_categories.*, t_products_filters.*
  2. FROM t_products
  3. LEFT JOIN t_categories ON t_products.CATEGORY_ID = t_categories.CATEGORY_ID
  4. LEFT JOIN t_products_filters ON t_products.PRODUCT_ID = t_products_filters.PRODUCT_ID
  5. WHERE t_products.PRODUCT_options_erased=0
  6. AND t_categories.CATEGORY_area = 'particular'
  7. AND t_products_filters.PRODUCTFILTER_options = '95'
  8. GROUP BY t_products.PRODUCT_ID ORDER BY t_products.PRODUCT_ID DESC
Hay 77 resultados

Si ejecuto esto:
Código MySQL:
Ver original
  1. SELECT t_products.*, t_categories.*, t_products_filters.*
  2. FROM t_products
  3. LEFT JOIN t_categories ON t_products.CATEGORY_ID = t_categories.CATEGORY_ID
  4. LEFT JOIN t_products_filters ON t_products.PRODUCT_ID = t_products_filters.PRODUCT_ID
  5. WHERE t_products.PRODUCT_options_erased=0
  6. AND t_categories.CATEGORY_area = 'particular'
  7. AND t_products_filters.PRODUCTFILTER_options = '96'
  8. GROUP BY t_products.PRODUCT_ID ORDER BY t_products.PRODUCT_ID DESC
Hay 26 resultados


Si buco productos con esos filtros (95 y 96) SI hay productos con esos filtros.


¿Alguna idea de cómo hacer esta SQL correcta para que me muestre SOLO los productos que SI tengan esos filtros?


Había pensado unir ambas sentencias pero el resultado serían productos que tienen esos filtros.
Yo necesito los productos que tienen SOLO esos filtros.


Gracias y un saludo

Última edición por gnzsoloyo; 25/09/2013 a las 06:10 Razón: Etiquetar bien, por favor.
  #2 (permalink)  
Antiguo 25/09/2013, 06:13
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: Problema consulta

Código MySQL:
Ver original
  1. SELECT   t_products.*, t_categories.*, t_products_filters.*
  2.     FROM t_products
  3.          INNER JOIN t_categories ON t_products.CATEGORY_ID = t_categories.CATEGORY_ID
  4.          INNER JOIN t_products_filters ON t_products.PRODUCT_ID = t_products_filters.PRODUCT_ID
  5.    WHERE t_products.PRODUCT_options_erased = 0
  6.      AND t_categories.CATEGORY_area = 'particular'
  7.      AND t_products_filters.PRODUCTFILTER_options IN(95, 96)
  8. GROUP BY t_products.PRODUCT_ID
  9. ORDER BY t_products.PRODUCT_ID DESC
__________________
¿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/09/2013, 06:21
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Problema consulta

Complemento por si no ves donde te equivocabas...

esto es imposible

Código MySQL:
Ver original
  1. AND t_products_filters.PRODUCTFILTER_options = '95'
  2. AND t_products_filters.PRODUCTFILTER_options = '96'
esto si

Código MySQL:
Ver original
  1. AND (t_products_filters.PRODUCTFILTER_options = '95'
  2.         OR t_products_filters.PRODUCTFILTER_options = '96')

(atención a los parentesis)

o

Código MySQL:
Ver original
  1. AND t_products_filters.PRODUCTFILTER_options IN(95, 96)

que seria lo mismo.

"A" no puede ser igual a 1 y a 2 al mismo tiempo. Si puede ser igual a 1 o a 2.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #4 (permalink)  
Antiguo 25/09/2013, 10:31
Avatar de el_javi  
Fecha de Ingreso: marzo-2005
Ubicación: MAdrid
Mensajes: 844
Antigüedad: 19 años
Puntos: 10
Respuesta: Problema consulta

Gracias por las respuestas

Creo que faltó por miparte explicación...

el Producto A
Puede tener la propiedad 95
Y la propiedad 96
Y la propiedad 188
Y la propiedad 45



El producgo B
Puede tener la propiedad 95
Y lapropiedad 96
Y la propiedad 1
Y lapropiedad 34
Y la propiedad 62


El producgo C
Puede tener la propiedad 95
Y lapropiedad 23
Y la propiedad 44
Y lapropiedad 69
Y la propiedad 54

Por ello yo necesito encontrar los productos que tienen la 95 y la 96

Con la búsqueda con OR o con el IN me aparecen TODOS los mostrados, porque TODOS tienen pa 95

Pero C no debería salir, porque NO TIENE la 96
Solo debería salir el producto A y B

A ver si con esto podemos enfilarlo mejor :)

Saludos.
  #5 (permalink)  
Antiguo 25/09/2013, 13:06
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Problema consulta

Hola el_javi:

Este tipo de consultas son de las que te debes aprender desde que comienzas a estudiar SQL... hay muchísimos ejemplos en la red y en este mismo foro hemos tratado infinidad de veces estas consultas, te pongo un ejemplo "genérico" para que lo adaptes a tus tablas y tus datos. Supongamos que tenemos las siguientes tablas:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM restaurantes;
  2. +---------+--------------------+
  3. | id_rest | nombre_rest        |
  4. +---------+--------------------+
  5. |       1 | restaurante uno    |
  6. |       2 | restaurante dos    |
  7. |       3 | restaurante tres   |
  8. |       4 | restaurante cuatro |
  9. +---------+--------------------+
  10. 4 rows IN SET (0.16 sec)
  11.  
  12. mysql> SELECT * FROM servicios;
  13. +---------+---------------+
  14. | id_serv | nombre_serv   |
  15. +---------+---------------+
  16. |       1 | aparcacoches  |
  17. |       2 | guarderia     |
  18. |       3 | otro servicio |
  19. +---------+---------------+
  20. 3 rows IN SET (0.00 sec)
  21.  
  22. mysql> SELECT * FROM restaurantes_servicios;
  23. +--------------+---------+---------+
  24. | id_rest_serv | id_rest | id_serv |
  25. +--------------+---------+---------+
  26. |            1 |       1 |       1 |
  27. |            2 |       2 |       2 |
  28. |            3 |       3 |       1 |
  29. |            4 |       3 |       2 |
  30. |            5 |       4 |       1 |
  31. |            6 |       4 |       3 |
  32. +--------------+---------+---------+
  33. 6 rows IN SET (0.00 sec)

Observa que cada restauran tiene uno o varios servicios... supongamos que te interesa saber aquellos restaurantes que cuenta con dos servicios en especial (aparcacoches y guardería). Observa que los restaurantes UNO y DOS tienen alguno de los servicios que tú necesitas, el restaurant TRES tiene ambos, y aunque el restaurante CUATRO tiene dos servicios SÓLO TIENE UNO DE LOS QUE TE INTERESAN. podrías hacer una consulta así:

Código MySQL:
Ver original
  1. mysql> SELECT id_rest, COUNT(DISTINCT id_serv)
  2.     -> FROM restaurantes_servicios WHERE id_serv IN (1, 2)
  3.     -> GROUP BY id_rest;
  4. +---------+-------------------------+
  5. | id_rest | COUNT(DISTINCT id_serv) |
  6. +---------+-------------------------+
  7. |       1 |                       1 |
  8. |       2 |                       1 |
  9. |       3 |                       2 |
  10. |       4 |                       1 |
  11. +---------+-------------------------+
  12. 4 rows IN SET (0.00 sec)

Observa que esta consulta te da el TOTAL DE SERVICIOS QUE TE INTERESA que tiene cada restaurant... OBSERVA QUE SÓLO EL RESTAURANT TRES tiene ambos servicios... agregando un HAVING COUNT() podrías filtrar aquellos que tengan ambos servicios:

Código MySQL:
Ver original
  1. mysql> SELECT id_rest
  2.     -> FROM restaurantes_servicios WHERE id_serv IN (1, 2)
  3.     -> GROUP BY id_rest
  4.     -> HAVING COUNT(DISTINCT id_serv) = 2;
  5. +---------+
  6. | id_rest |
  7. +---------+
  8. |       3 |
  9. +---------+
  10. 1 row IN SET (0.00 sec)

Con esta información puedes filtar los registros que te interesan...

haz la prueba, y si continuas con problemas postea algo de lo que intentaste hacer y con gusto te ayudamos a corregir la consulta.

saludos
Leo.
  #6 (permalink)  
Antiguo 29/09/2013, 05:20
Avatar de el_javi  
Fecha de Ingreso: marzo-2005
Ubicación: MAdrid
Mensajes: 844
Antigüedad: 19 años
Puntos: 10
Respuesta: Problema consulta

Muchas gracias compañero!!!!!

Etiquetas: join, select, 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 13:05.