Ver Mensaje Individual
  #2 (permalink)  
Antiguo 20/06/2009, 22:02
Avatar de gnzsoloyo
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: duda: consulta no devuelve resultado deseado

Tu sentencia tiene fallas lógicas en el WHERE.
Según la condición, te va devolver resultado si la primera condición es TRUE y la segunda también es TRUE... cosa imposible porque en la primera quieres que el p_e_f_id sea 1 y en la otra sea 2, y que además el contenido del campo pef_value contenga al mismo tiempo 17 y 205 (estoy abreviando nombres, se vuelve difícil con nombres tan largos...)
El problema es que estás usando AND, lo que en esa ecuación lógica hace que todo debe ser TRUE para devolverte un registro... pero estás operando sobre el mismo registro con condiciones lógicas contradictorias.

La segunda parte del problema es que no se comprende qué es lo que quieres obtener.
Si me atengo al nombre de los campos, products_extra_fields_id es la PK de la tabla, products_extra_fields_value es el valor de nosequé, y product_id es una FK.
La consulta que haces debería devolverte el product_id si y sólo si, en dos registros dados, un value contiene 205 y el otro 17.
Así planteada no se comprende qué es lo que buscas, pero de todos modos el problema que tienes es que lo que quieres hacer es comparar dos registros de la misma tabla... y eso no se puede hacer con una consulta simple, porque en las sentencias simples las condiciones del WHERE operan sobre cada registro en forma individual, no uno con otros. Para realizar esa tarea existe el JOIN.
Lo que se debe hacer es realizar un JOIN de la tabla consigo misma, esto es, invocar dos veces la tabla en la consulta:

Código sql:
Ver original
  1. SELECT products_id
  2. FROM products_to_products_extra_fields P1
  3.     INNER JOIN products_to_products_extra_fields P2 USING(product_id)
  4. WHERE
  5.     (P1.products_extra_fields_value LIKE '%205%'
  6.     AND P1.products_extra_fields_id =1)
  7.     AND
  8.     (P2.products_extra_fields_value LIKE '%17%'
  9.     AND P2.products_extra_fields_id =2)
  10.     AND P1.product_id=65;

La tabla, de esta forma, se carga dos veces en la memoria, pero como se le asignan alias, operan como si fueran dos tablas distintas.
Además, estoy enlazando las tablas por el product_id, ya que lo que tu quieres es que te devuelva ese valor si es igual en ambos registros invocados (de allí que se use como clave de JOIN), y que además sea igual a 65.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)