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

Filtro entre Rangos de Precio

Estas en el tema de Filtro entre Rangos de Precio en el foro de Mysql en Foros del Web. estimados mi consulta es que quiero mostrar un filtro a una busqueda entre rangos de precios con la cantidad de resultados posibles .. ejemplo se ...
  #1 (permalink)  
Antiguo 09/09/2011, 15:50
Avatar de jakuam  
Fecha de Ingreso: abril-2007
Mensajes: 354
Antigüedad: 17 años
Puntos: 0
Filtro entre Rangos de Precio

estimados mi consulta es que quiero mostrar un filtro a una busqueda entre rangos de precios con la cantidad de resultados posibles .. ejemplo

se muestra la busqueda y el usuario puede seleccionar filtrar asi

Filtro Precios

de $0 a $100 (5)
de $100 a $500 (10)
de $500 a $1000 (15)

se que se puede hacer de esta forma de individualmente para cada caso:
Código:
mysql> SELECT precio, COUNT(*) FROM locaciones WHERE precio BETWEEN '0' AND '50' GROUP BY precio;
hay forma de realizar todos los rangos con una sola consuta y mediante un bucle (ej: DO While) mostrar los posibles filtros??
O tengo que hacer para cada caso una Consulta individual... Es posible hacerlo con CASE WHEN ?

espero sus prontos comentarios
desde ya muchas gracias por sui cooperacion y enseñanzas

saludos
__________________
Jakuam
Reserva Hoteles Online
Turismo San Rafael Mendoza
  #2 (permalink)  
Antiguo 12/09/2011, 06:23
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Filtro entre Rangos de Precio

Si solo son esos tres rangos o algunos mas

Código MySQL:
Ver original
  1. SELECT if(precio<100,"de $0 a $100",
  2.                   if(precio<500,"de $100 a $500",
  3.                            if(precio<1000,"de $500 a $1000",
  4.                                    if(precio>1000,"mas de $1000")))) as rango,
  5.               count(*)
  6. FROM locaciones
  7. group by  if(precio<100,"de $0 a $100",
  8.                     if(precio<500,"de $100 a $500",
  9.                            if(precio<1000,"de $500 a $1000",
  10.                                   if(precio>1000,"mas de $1000"))))

Siempre puedes montar un bucle externo que te escriba la query....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 12/09/2011, 06:59
Avatar de jakuam  
Fecha de Ingreso: abril-2007
Mensajes: 354
Antigüedad: 17 años
Puntos: 0
Respuesta: Filtro entre Rangos de Precio

GRACIAS QUIMFV ... no sabia que se podia usar el condicional en una consulta .. lo voy a probrar .. si no funciona igual me ayudaste me abriste la mente y UTILIZARE CASE WHEN
__________________
Jakuam
Reserva Hoteles Online
Turismo San Rafael Mendoza
  #4 (permalink)  
Antiguo 12/09/2011, 08:02
Avatar de jakuam  
Fecha de Ingreso: abril-2007
Mensajes: 354
Antigüedad: 17 años
Puntos: 0
Respuesta: Filtro entre Rangos de Precio

QUIMFV ... mira lo probe .. pero me tira error .. te dejo codigo terminado :

Código:
 SELECT if(cal_calendario.tarifa_normal<"100","de $0 a $100",
* * * * * * * * * if(cal_calendario.tarifa_normal<"500","de $100 a $500",
* * * * * * * * * * * * * *if(cal_calendario.tarifa_normal<"1000","de $500 a $1000",
* * * * * * * * * * * * * * * * * *if(cal_calendario.tarifa_normal>"1000","mas de $1000")))) as rango, count(cal_calendario.tarifa_normal) FROM alojamientos , habitaciones, cal_calendario, ciudades  WHERE alojamientos.tipo NOT LIKE "ca%"  AND habitaciones.alojar_id = alojamientos.alojar_id AND cal_calendario.id_habitacion = habitaciones.hab_id AND habitaciones.pax_max >= "$pax1" AND cal_calendario.tarifa_normal > "0" AND cal_calendario.fecha ="$fechabus11" AND cal_calendario.estancia_minima <= "$dias_diferencia1" AND ciudades.Country = alojamientos.pais AND ciudades.Subdivision = alojamientos.provincia AND ciudades.Location = alojamientos.ciudad
GROUP BY *if(cal_calendario.tarifa_normal<100,"de $0 a $100",
* * * * * * * * * * if(cal_calendario.tarifa_normal<500,"de $100 a $500",
* * * * * * * * * * * * * *if(cal_calendario.tarifa_normal<1000,"de $500 a $1000",
* * * * * * * * * * * * * * * * * if(cal_calendario.tarifa_normal>1000,"mas de $1000"))))
y el error es :

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')))) as rango, count(cal_calendario.tarifa_normal) FROM alojamientos , habitacio' at line 4

espero tu ayuda
__________________
Jakuam
Reserva Hoteles Online
Turismo San Rafael Mendoza
  #5 (permalink)  
Antiguo 12/09/2011, 08:03
Avatar de jakuam  
Fecha de Ingreso: abril-2007
Mensajes: 354
Antigüedad: 17 años
Puntos: 0
Respuesta: Filtro entre Rangos de Precio

espero ayuda
__________________
Jakuam
Reserva Hoteles Online
Turismo San Rafael Mendoza
  #6 (permalink)  
Antiguo 12/09/2011, 09:26
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Filtro entre Rangos de Precio

Hola jakuam:

Con el permiso de quimfv, el problema está en el ultimo de los if's, Si te hubieras tomado un poco de tiempo para investigar la sintaxis de esta función verías que necesita tres parámetros:

Cita:
IF(expr1,expr2,expr3)

Si expr1 es TRUE (expr1 <> 0 and expr1 <> NULL) entonces IF() retorna expr2; de otro modo retorna expr3. IF() retorna un valor numérico o cadena de caracteres, en función del contexto en que se usa
.

El último de los if's sólo está recibiendo dos parámetros, checa este script:


Código MySQL:
Ver original
  1. mysql> CREATE TABLE locaciones  (id INT, precio INT);
  2. Query OK, 0 rows affected (0.09 sec)
  3.  
  4. mysql> INSERT INTO locaciones  VALUES (1, 50), (2, 110), (3, 75), (4, 250),
  5.     -> (5,1000), (6, 150), (7, 750);
  6. Query OK, 7 rows affected (0.07 sec)
  7. Records: 7  Duplicates: 0  Warnings: 0
  8.  
  9. mysql> SELECT * FROM locaciones ;
  10. +------+--------+
  11. | id   | precio |
  12. +------+--------+
  13. |    1 |     50 |
  14. |    2 |    110 |
  15. |    3 |     75 |
  16. |    4 |    250 |
  17. |    5 |   1000 |
  18. |    6 |    150 |
  19. |    7 |    750 |
  20. +------+--------+
  21. 7 rows in set (0.00 sec)
  22.  
  23. mysql> SELECT
  24.     -> IF(precio < 100, "de $0 a $100",
  25.     -> IF(precio < 500, "de $100 a $500",
  26.     -> IF(precio < 1000, "de $500 a $1000","más $1000"))) AS rango,
  27.     -> COUNT(*)
  28.     -> FROM locaciones
  29.     -> GROUP BY
  30.     -> IF(precio < 100, "de $0 a $100",
  31.     -> IF(precio < 500, "de $100 a $500",
  32.     -> IF(precio < 1000, "de $500 a $1000","más $1000")));
  33. +-----------------+----------+
  34. | rango           | COUNT(*) |
  35. +-----------------+----------+
  36. | de $0 a $100    |        2 |
  37. | de $100 a $500  |        3 |
  38. | de $500 a $1000 |        1 |
  39. | más $1000       |        1 |
  40. +-----------------+----------+
  41. 4 rows in set (0.00 sec)

Debes tener cuidado en la definición correcta de tus rangos y tus descripciones, ya que tal y como los estás colocando no son totalmente excluyentes. Por ejemplo para el caso del registro donde el precio represente uno de los extremos del intervalo ¿Dónde debería colocarse? en mi forma particular de ver las cosas tus rangos deberías manejarlos así:

Código:
de $0 a $99.99
de $100 a $499.99
de $500 a $999.99
de $1000 en adelante
De esta manera no "empalmas" precios dentro de las categorías, pero eso es cuestión de tu lógica de negocio.

Saludos
Leo.
  #7 (permalink)  
Antiguo 13/09/2011, 00:57
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Filtro entre Rangos de Precio

leonardo_josue tienes todo mi permiso para corregirme y tines toda la razón...
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Etiquetas: php, precio, rangos, usuarios, 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:12.