Ver Mensaje Individual
  #1 (permalink)  
Antiguo 31/10/2011, 06:29
Avatar de pempas
pempas
 
Fecha de Ingreso: diciembre-2003
Ubicación: Barcelona
Mensajes: 985
Antigüedad: 20 años, 4 meses
Puntos: 6
Consulta con IN devuelve parámetros no deseados

Hola a todo el mundo,
tengo una consulta que filtra caraterísticas de productos por una tabla relacional.

Sería algo así:

Código PHP:
Tabla productos:
idproducto -> autoincrement
nombre 
-> char

Tabla caracteristicas
:
idcarac -> autoincrement
nombre 
-> char

Tabla relacional producos
-características
idproducto 
-> int
idcarac 
-> int 
En la tabla relacional se van relacionando productos con características, y luego el filtro de productos lo extraigo con la consulta IN, así:

Código PHP:
Select p.nombre From productos p Where p.idproducto IN 
(Select idproducto From caracteristicas_rel Where idcarac IN (4,7,8
and 
idproducto=p.idproducto); 
Esto me devuelve un buen resultado, el problema es el siguiente.

Si yo tengo dos productos, imaginemos dos discos duros:

- Disco duro 1
- Características 500Gb

- Disco duro 2
- Características 600Gb

Y en la web marco 500Gb como característica, me extraerá el disco 1, pero si marco 500Gb y 600Gb entonces me extrae el disco 1 y 2, cuando no debería de extraer ninguno, ¿entienden?

Ya que al seleccionar la dos características estos dos productos NO cumplen con el criterio, es decir, o son de 500 o 600gb

¿Cómo puedo hacer la consulta para que fuerce a sacar sólo los productos que tengan TODAS las características marcadas.

Haciendo un Inner Join no me vale, más que nada porque tengo muchas tablas relacionadas más.

Gracias a todo el mundo!