SQL - Criterios de busqueda

 
Vista:

Criterios de busqueda

Publicado por Javier (3 intervenciones) el 13/01/2009 10:34:25
Hola a tod@s,

Trataré de explicarme lo mejor que pueda. Tengo una tabla de Productos con clave primaria ID y otra tabla Propiedades con

diferentes propiedades de dichos productos (una propiedad por cada fila) con una clave ajena a la tabla de productos.

P.ej: En la tabla de productos digamos que tengo el producto "Alfombra persa num 2" y en la tabla de Propiedades tendría

por ejemplo en diferentes filas su color, tamaño, estilo, etc

Mi objetivo es crear un formulario de busqueda que filtre los productos según los criterios de busqueda seleccionados por el usuario,

así por ejemplo puede darse que el usuario busque sólo por color, o por color y estilo a la vez.

Por desgracia no puedo cambiar la estructura de la base de datos ya que está me viene impuesta. Aunque he intentado crear la

query apropiada para filtrar por más de una propiedad no he conseguido ningún resultado.

Dejo un ejemplo de filtro de busqueda por un criterio (el cual funciona):

SELECT *
FROM productos p, propiedades prop
WHERE p.ID = prop.post_id
AND prop.key = 'estilo'
AND prop.value = 'Tradicional'
ORDER BY p.date DESC

Y otro que estoy intentando para dos pero que no funciona:

SELECT *
FROM productos p, propiedades prop
WHERE p.ID = prop.post_id

AND prop.key = 'estilo'

AND prop.value = 'Tradicional'

AND prop.key = 'color'
AND prop.value = 'rojo'


ORDER BY p.date DESC

Espero no haberme explicado horriblemente mal, un saludo y muchas gracias por adelantado.

javier.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Posible respuesta...

Publicado por Leopoldo Taylhardat (93 intervenciones) el 13/01/2009 14:54:52
Saludos... creo que tu problema es este por lo que entiendo...
SELECT *
FROM productos p, propiedades prop
WHERE p.ID = prop.post_id
AND prop.key = 'estilo'
AND prop.value = 'Tradicional'
ORDER BY p.date DESC

Debes colocar así...
SELECT *
FROM productos p, propiedades prop
WHERE p.ID = prop.post_id
AND prop.estilo = 'Tradicional'
ORDER BY p.date DESC

Nota... a lo mejor tienes problemas con la comparación de minúsculas y mayúsculas, ya que a algunas BD hay que ponerles la opción de nó diferenciar esto en comparaciones.
Espero que te sirva.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Posible respuesta...

Publicado por Javier (3 intervenciones) el 13/01/2009 16:57:41
Gracias Leopoldo,

Precisamente acabo de poner una nota aclaratoria porque creo que no había dejado muy claro la estructura de las tablas, espero haberlo hecho ahora.

Con respecto a lo que propones es precisamente eso, pero mi intención es conseguir que la query me devuelva por ejemplo "las alfombras de estilo tradicional que sean de calidad y color rojo". Esto es, dos o más criterios combinados.

Un saludo y muchas gracias por tu atención,

Javier.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Criterios de busqueda

Publicado por Javier (3 intervenciones) el 13/01/2009 16:51:28
Hola otra vez,

Creo que un ejemplo visual puede servir mejor que "mis" palabras :)

PRODUCTOS
ID Nombre Temporada ...
1 Alfombra1 2006
2 Alfombra2 2007
...

Propiedades (prod_ID clave ajena a productos)
Meta_ID prod_ID key value ...
1 2 color verde
2 2 estilo moderno
3 1 color azul
4 1 estilo clásico

...

Sólo necesito cruzar los campos Productos.ID con Porpiedades.prod_ID y averiguar cuales de los Productos cumplen todas las condiciones introducidas en el formulario de busqueda.

Así por ejemplo, una búsqueda para una alfombra "verde" y "moderno" debería devolverme el ID 2 pero no el 1.

Lo que no consigo hacer es filtrar por más de un criterio, al intentar hacerlo por dos con la query del post anterior me da resultado 0 filas.

Espero estar aclarando las cosas y no liando aún más!!

Javier.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Criterios de busqueda

Publicado por Leopoldo Taylhardat (93 intervenciones) el 13/01/2009 19:56:24
...
SELECT *
FROM productos p, propiedades prop
WHERE p.ID = prop.post_id

AND prop.estilo = 'Tradicional'

AND prop.color = 'rojo'
and ...
ORDER BY p.date DESC

Si lo encierras en paréntesis siempre es mejor...
SELECT *
FROM productos p, propiedades prop
WHERE p.ID = prop.post_id

AND (prop.estilo = 'Tradicional')

AND (prop.color = 'rojo' )
and ...
ORDER BY p.date DESC

Creo que con eso resuelves...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Criterios de busqueda

Publicado por Liliana (426 intervenciones) el 15/01/2009 12:24:03
Hola Javier,
Tenés forma de saber cuántos criterios de búsqueda llegan a cada consulta?
Si fuera así, ésta es una posibilidad:

SELECT p.ID, p.nombre
FROM productos p
FULL JOIN propiedades prop ON p.ID = prop.post_id
WHERE (prop.key = 'estilo' AND prop.value = 'Tradicional')
OR (prop.key = 'color' AND prop.value = 'rojo')
GROUP BY p.ID, p.nombre
HAVING COUNT (*) = 2 -- 2 ES EL NUMERO DE CRITERIOS DE BÚSQUEDA

Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar