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

duda: consulta no devuelve resultado deseado

Estas en el tema de duda: consulta no devuelve resultado deseado en el foro de Mysql en Foros del Web. hola, tengo una tabla llamada products_to_products_extra_fields con los campos: products_extra_fields_value, products_extra_fields_id y products_id tambien tengo sta consulta: Código: SELECT products_id FROM products_to_products_extra_fields WHERE (products_extra_fields_value LIKE ...
  #1 (permalink)  
Antiguo 20/06/2009, 19:07
Avatar de MisatoKatsuragi  
Fecha de Ingreso: abril-2009
Mensajes: 109
Antigüedad: 15 años
Puntos: 2
Pregunta duda: consulta no devuelve resultado deseado

hola, tengo una tabla llamada products_to_products_extra_fields con los campos: products_extra_fields_value, products_extra_fields_id y products_id

tambien tengo sta consulta:
Código:
SELECT products_id FROM products_to_products_extra_fields
WHERE 
(products_extra_fields_value LIKE '%205%'
AND products_extra_fields_id =1)

AND

(products_extra_fields_value LIKE '%17%'
AND products_extra_fields_id =2)
Necesito que si una linea tiene de products_id 65, products_extra_fields_value 205 y products_extra_fields_id 1, y otra tiene products_id 65, products_extra_fields_value 17 y products_extra_fields_id 2, me devuelva 65

Pero no me devuelve nada, alguien sabe decirme como hacerlo????


MUCHAS GRACIAS
  #2 (permalink)  
Antiguo 20/06/2009, 22:02
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: 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)
  #3 (permalink)  
Antiguo 22/06/2009, 07:52
Avatar de MisatoKatsuragi  
Fecha de Ingreso: abril-2009
Mensajes: 109
Antigüedad: 15 años
Puntos: 2
Respuesta: duda: consulta no devuelve resultado deseado

aja.... creo que lo entiendo voy a ver si lo puedo implementar, essto esta sacado del oscommerce, una movida muy tocha con las busquedas por campos extra... en fin, un lio

lo dicho, voy a ver si puedo hacer algo, muchas gracias!!!


EDIT:

Resuelto, pero no con la solucion que me diste, auqnue la agracezco, gzlsoloyo, porque, puf, no habia cristo que la metiera en el osc... pero bueno, como decian en el TBO ,
Cita:
no te acostarás sin saber una cosa mas
:D

Última edición por MisatoKatsuragi; 23/06/2009 a las 07:57
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 22:45.