
Consultas sql con filtros multiples
Publicado por Moises (1 intervención) el 06/06/2017 12:11:27
Buenos días
Llevo unos días con un problema que no consigo solucionar, si alguno le ha pasado y me recomienda como realizarlo se lo agradezco.
Lo que necesito conseguir es listar los "filtros de productos" de una tienda que cumplan los filtros de búsqueda elegidos por los clientes.. sumando todos ellos, sin limite.. igual que la web de https://www.pccomponentes.com/tablets el cliente va eligiendo los filtros : marcas, almacenamiento, mermoria y según vas pulsando los filtros solo muestran los que tienen productos activos.. desactivando el resto.
Por ejemplo: Quiero listar > "tablet" > con memorias " 2Gb RAM" y de "4Gb RAM" y procesador de 1.2MHz
TABLAS:
Tengo 3 tablas:
- Filtros
campo 1 : id (numerico)
campo 2 : texto (string)
Ejem:
1 - Memoria
2 - Procesador
3 - Resolución
etc..
- Filtros valores
campo 1 : id (numerico)
campo 2 : texto (string)
campo 3 : id filtro (numerico)
Ejem:
1 - 2 Gb RAM - 1
2 - 4 Gb RAM - 1
3 - CPU 1.2MHz - 2
etc..
-Productos
campo 1 : idp (numerico)
campo 2 : nombre (string)
campo 3 : filtros valores (string: separado los valores "ID" de la tabla "filtros" por comas, puede tener diferentes valores cada producto)
campo 4: activo (numero = 1 activo / 0 = baja)
Ejem:
1 | CPU Intel 1.7 | 2 | 1
2 | Portatil ACER 1.7 8Gb | 1, 2 | 1
3 | Memoria 8Gb DDR | 1 | 1
En la consulta del campo "filtros" de productos es dónde no consigo que funcione, al tener varios valores separador por comas, por eso uso REGEXP. Si hago las siguientes SELECT no me da resultado:
select DISTINCT(f.id), f.txt, f.url,f.id_filtro from filtros_productos as f INNER JOIN tiendab2c_productos as p ON p.filtros REGEXP '[[:<:]]f.id[[:>:]]' WHERE p.activo='1' and f.id_filtro='3' order by f.txt ASC
¿Saben que hago mal?
Gracias
Llevo unos días con un problema que no consigo solucionar, si alguno le ha pasado y me recomienda como realizarlo se lo agradezco.
Lo que necesito conseguir es listar los "filtros de productos" de una tienda que cumplan los filtros de búsqueda elegidos por los clientes.. sumando todos ellos, sin limite.. igual que la web de https://www.pccomponentes.com/tablets el cliente va eligiendo los filtros : marcas, almacenamiento, mermoria y según vas pulsando los filtros solo muestran los que tienen productos activos.. desactivando el resto.
Por ejemplo: Quiero listar > "tablet" > con memorias " 2Gb RAM" y de "4Gb RAM" y procesador de 1.2MHz
TABLAS:
Tengo 3 tablas:
- Filtros
campo 1 : id (numerico)
campo 2 : texto (string)
Ejem:
1 - Memoria
2 - Procesador
3 - Resolución
etc..
- Filtros valores
campo 1 : id (numerico)
campo 2 : texto (string)
campo 3 : id filtro (numerico)
Ejem:
1 - 2 Gb RAM - 1
2 - 4 Gb RAM - 1
3 - CPU 1.2MHz - 2
etc..
-Productos
campo 1 : idp (numerico)
campo 2 : nombre (string)
campo 3 : filtros valores (string: separado los valores "ID" de la tabla "filtros" por comas, puede tener diferentes valores cada producto)
campo 4: activo (numero = 1 activo / 0 = baja)
Ejem:
1 | CPU Intel 1.7 | 2 | 1
2 | Portatil ACER 1.7 8Gb | 1, 2 | 1
3 | Memoria 8Gb DDR | 1 | 1
En la consulta del campo "filtros" de productos es dónde no consigo que funcione, al tener varios valores separador por comas, por eso uso REGEXP. Si hago las siguientes SELECT no me da resultado:
select DISTINCT(f.id), f.txt, f.url,f.id_filtro from filtros_productos as f INNER JOIN tiendab2c_productos as p ON p.filtros REGEXP '[[:<:]]f.id[[:>:]]' WHERE p.activo='1' and f.id_filtro='3' order by f.txt ASC
¿Saben que hago mal?
Gracias
Valora esta pregunta


0