Foros del Web » Programando para Internet » PHP »

Filtrado acumulativo de resultados de SQL

Estas en el tema de Filtrado acumulativo de resultados de SQL en el foro de PHP en Foros del Web. Buenas, he dudado mucho de en que foro debia poner mi post y al final me he decidido por este, si no es el correcto, ...
  #1 (permalink)  
Antiguo 10/02/2010, 21:59
 
Fecha de Ingreso: febrero-2010
Mensajes: 4
Antigüedad: 9 años, 10 meses
Puntos: 0
Pregunta Filtrado acumulativo de resultados de SQL

Buenas, he dudado mucho de en que foro debia poner mi post y al final me he decidido por este, si no es el correcto, por favor muevanlo, gracias.

Mi pregunta es, como puedo realizar un filtrado de resultados leidos de una base de datos SQL tal y como tienen en la web de [URL="http://www.pixmania.com/es/es/1661/xx/xx/1/1/criteresn.html?itag=12328"]pixmania.com[/URL], por marca, precio, etc.

Daros cuenta que el filtro es acumulativo, osea, que si yo pulso en alguna marca, solo me mostrara los productos de esa marca, pero luego si pulso en una segunda caracteristica, me mostrara los productos que son de la marca que seleccione inicialmente y ademas solo los que tienen la caracteristica que acabo de pulsar.

Se que es un poco lío explicarlo por escrito, pero espero me hayan entendido.

Lo que no se es con que lo podría hacer, jQuery, Ajax, Motools, JavaScript, ... o algo ya programado que pueda usar en mi proyecto.

Muchas gracias.
  #2 (permalink)  
Antiguo 14/02/2010, 14:26
 
Fecha de Ingreso: febrero-2010
Mensajes: 4
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Filtrado acumulativo de resultados de SQL

Nadie sabe a que tipo de filtrado de datos me refiero ?

Gracias.
  #3 (permalink)  
Antiguo 14/02/2010, 14:58
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 17 años, 10 meses
Puntos: 29
Respuesta: Filtrado acumulativo de resultados de SQL

Si, pero no sé cuál es tu problema
Has empezado tal vez a hacerlo?
Si sabes filtrar por SQL sabes hacer eso que dices:

SELECT * FROM tabla WHERE campo='$valor'
SELECT * FROM tabla WHERE campo='$valor' AND caracteristica='$valor2'


¿Qué es lo complicado?
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #4 (permalink)  
Antiguo 15/02/2010, 02:59
 
Fecha de Ingreso: febrero-2010
Mensajes: 4
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Filtrado acumulativo de resultados de SQL

Hola CHuLoSoY, si efectivamente se podría filtrar de esa manera, pero date cuenta que el filtrado es acumulativo (por darle un nombre), es decir, que tu puedes filtrar por marca y luego por rango de precio o al revés sin que al elegir el segundo filtrado desaparezca el filtrado inicial. No se si sería montar la SELECT con javascript o algo así.

Lo has visto en la web de referencia ?

Gracias, por tu respuesta.
  #5 (permalink)  
Antiguo 15/02/2010, 09:07
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 17 años, 10 meses
Puntos: 29
Respuesta: Filtrado acumulativo de resultados de SQL

Si lo quieres hacer en javascript estaría muy bien.
Yo pondría un input hidden donde acumulas los datos del select y una vez pulsado Buscar envías la consulta entera del campo oculto.

Código HTML:
Ver original
  1. <input type="hidden" id="consulta">
Código Javascript:
Ver original
  1. function anadir(campo, valor) {
  2.  
  3.       document.getElementById("consulta").value+=campo+"='"+valor+"' AND ";
  4.  
  5. }

Código HTML:
Ver original
  1. <a href="anadir('campo','valor');">Campo</a>

Suerte
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #6 (permalink)  
Antiguo 15/02/2010, 10:00
Avatar de xcoltx  
Fecha de Ingreso: diciembre-2008
Mensajes: 65
Antigüedad: 11 años
Puntos: 0
Respuesta: Filtrado acumulativo de resultados de SQL

Bueno quiero aprovechar de postear :D

no entiendo bien la pregunta..
1.- ¿el problema del filtro son los select de las opciones de filtro?
2.- ¿o son la acumulacion de AND's en una variable de sql?

porque si es la 2 opcion tengo una solucion


mira yo lo hago asi:

(suponiendo que al menos 1 filtro es obligatorio)
supongamos que se tienen 3 opciones de filtros y se envian todas:

Código PHP:
// hagamos como que llegaron de un $_GET
$marca="toyota"
$año="2007";
$color="azul";

//entonces empiezas a crear tu consulta:

$sql "select * from automoviles where ";

if(
$marca){ 

       
$sql.= "marca = $marca";  //si hay variable $marca agregar a la consulta
 
         //si ademas existen las variable $año y $color entonces agregar con "AND"

       
if($año)  $sql.= " and año= $año";   
       if(
$color$sql.=" and color= $color"
       
       }

else {  
//cuando $marca no existe pero $año o $color si estan

        //reviso si hay variable $año
        
if($año) { 

              
$sql.= "año= $año";        //agrego $año a la busqueda sql (sin AND)
              
if($color)  $sql.= " and color= $color";  //si adema esta $color, agregar con AND
        
               
}
       
        
//en caso que no haya $año, comprobar si existe $color para agregar (con AND)
        
else if($color$sql.= "color= $color";

       } 
Disculpa si lo hice muy comentado xD .
  #7 (permalink)  
Antiguo 15/02/2010, 11:00
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 17 años, 10 meses
Puntos: 29
Respuesta: Filtrado acumulativo de resultados de SQL

Lo mismo que le dije yo pero sin código. Es ir mirando qué posibles filtros hay y aplicarle los que haya.
también se puede hacer un foreach
Código PHP:
Ver original
  1. //por POST
  2.  
  3. $sql="SELECT * FROM tabla WHERE ";
  4. $i=0;
  5.  
  6. foreach($_POST as $campo=>$valor) {
  7. $i++;
  8.      if($i==1) {
  9.        $sql.=" ".$campo."='".$valor."' ";
  10.      } else {
  11.        $sql.=" AND ".$campo."='".$valor."' ";
  12.      }
  13.  
  14. }
  15.  
  16.  
  17. //por GET
  18.  
  19. $sql="SELECT * FROM tabla WHERE ";
  20. $i=0;
  21.  
  22. foreach($_GET as $campo=>$valor) {
  23. $i++;
  24.      if($i==1) {
  25.        $sql.=" ".$campo."='".$valor."' ";
  26.      } else {
  27.        $sql.=" AND ".$campo."='".$valor."' ";
  28.      }
  29.  
  30. }

Saludos
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #8 (permalink)  
Antiguo 15/02/2010, 11:07
 
Fecha de Ingreso: febrero-2010
Mensajes: 4
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Filtrado acumulativo de resultados de SQL

Buenas, antes de nada muchas gracias a ambos por vuestras respuestas.

Me parece una idea excelente y seguro que funciona, voy a probarlo y os cuento.

De todos modos, no hay algún código ya creado en Ajax (por ejemplo) para filtrar los resultados de un grid relleno con los resultados de una consulta SQL con el que pueda hacer eso ? me suena haber visto algo así navegando pero no encuentro ahora mismo que era.

Saludos y gracias.
  #9 (permalink)  
Antiguo 15/02/2010, 13:48
Avatar de xcoltx  
Fecha de Ingreso: diciembre-2008
Mensajes: 65
Antigüedad: 11 años
Puntos: 0
Respuesta: Filtrado acumulativo de resultados de SQL

ahh .. ta buena esa con foreach no la conocia :D

Etiquetas: resultados, sql, filtros
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 00:13.