FAQ
Buenos dias,
me gustaria saber si alguno de ustedes tiene una idea de como resolver
este problemilla. No es muy dificil pero no tengo una idea fija de como
resolverlo.

En una base de datos tengo una cantidad media de 15.000 articulos con
sus precios. El cliente me ha pedido hacer un box para seleccionar
articulos segun los precios por lo que es necesario mostrarlos en
intervalos como:

10 - 100
100 - 500
500 - 1000
1000
Pues bien el problema es que tenemos un sistema de filtrado que
selecciona los articulos segun otros atributos, por ejemplo Marca y grupo.

La idea es calcular los precios de manera dinamica segun el resultado
del query. Por ejemplo:

El range del precio es de 0.9 a 15.000. Necesito un algoritmo que me
haga los siguiente:

1 - 100
100 - 1000
1000 - 5000
5000 - 10000
10000
Si por el contrario tengo un range como 743 - 1000 solo necesitaria

700 - 800
800 - 900
900
Si alguien sabe como hacer esto le estaria muy agradecido. Ideas son
bienvenidas.


Saludos

Carlos Medina

Search Discussions

  • Josu udaondo at Sep 26, 2008 at 9:35 am
    Como seleccionas el intervalo a ver los productos? Lo haces con dos inputs ?
    o viene prefijado?
  • Carlos Medina at Sep 26, 2008 at 10:20 am

    josu udaondo schrieb:
    Como seleccionas el intervalo a ver los productos? Lo haces con dos inputs ?
    o viene prefijado?

    Hola Josu,
    selecciono max y min de los articulos seleccionados. un Select. No viene
    prefijado.

    Saludos

    Carlos
  • Josu udaondo at Sep 26, 2008 at 10:31 am
    Pues yo mas o menos lo haría si...a ver que te parece...

    Cojo el precio mas alto y el mas bajo, digamos 0 y 15000.
    Cuento los registros que tengo (pongamos 1000 productos) y divido la
    cantidad de registros entre el numero de márgenes que le voy a mostrar al
    cliente, por ejemplo quiero 4 rangos de precios, asi que los divido entre
    4...
    Me sale 250..
    Cojo el precio del producto 1... el del 250, el del 251 el del 500, el del
    501 el del 750, el del 751 y el del 1000
    Primer rango del producto 1 al precio del producto 250
    Segundo rango del producto 251 al 500
    Tercer rango del 501 al 750
    Cuarto rango del 751 al 1000

    Si quieres serializas los precios obtenidos redondeándolos a la cifra que
    quieras or ejemplo:
    Aunque te salga por ejemplo 117 euros pues pones del tipo de 0 a 100...
    cuentas los digitos que tiene el precio y lo normalizas...

    Si te sirve? Asi es bastante fácil creo yo...
    Luego dependiendo de del enlace que te pique ya haces entonces la select mas
    concreta del rango de productos entre esos precios definidos...






    -----Mensaje original-----
    De: Carlos Medina
    Enviado el: viernes, 26 de septiembre de 2008 12:21
    Para: php-es@lists.php.net
    Asunto: [PHP-ES] Re: Algoritmo: como resolver un view de precios

    josu udaondo schrieb:
    Como seleccionas el intervalo a ver los productos? Lo haces con dos inputs ?
    o viene prefijado?

    Hola Josu,
    selecciono max y min de los articulos seleccionados. un Select. No viene
    prefijado.

    Saludos

    Carlos

    --
    PHP Spanish Localization Talk Mailing List (http://www.php.net/)
    To unsubscribe, visit: http://www.php.net/unsub.php
  • Carlos Medina at Sep 26, 2008 at 10:42 am

    josu udaondo schrieb:
    Pues yo mas o menos lo haría si...a ver que te parece...

    Cojo el precio mas alto y el mas bajo, digamos 0 y 15000.
    Cuento los registros que tengo (pongamos 1000 productos) y divido la
    cantidad de registros entre el numero de márgenes que le voy a mostrar al
    cliente, por ejemplo quiero 4 rangos de precios, asi que los divido entre
    4...
    Me sale 250..
    Cojo el precio del producto 1... el del 250, el del 251 el del 500, el del
    501 el del 750, el del 751 y el del 1000
    Primer rango del producto 1 al precio del producto 250
    Segundo rango del producto 251 al 500
    Tercer rango del 501 al 750
    Cuarto rango del 751 al 1000

    Si quieres serializas los precios obtenidos redondeándolos a la cifra que
    quieras or ejemplo:
    Aunque te salga por ejemplo 117 euros pues pones del tipo de 0 a 100...
    cuentas los digitos que tiene el precio y lo normalizas...

    Si te sirve? Asi es bastante fácil creo yo...
    Luego dependiendo de del enlace que te pique ya haces entonces la select mas
    concreta del rango de productos entre esos precios definidos...






    -----Mensaje original-----
    De: Carlos Medina
    Enviado el: viernes, 26 de septiembre de 2008 12:21
    Para: php-es@lists.php.net
    Asunto: [PHP-ES] Re: Algoritmo: como resolver un view de precios

    josu udaondo schrieb:
    Como seleccionas el intervalo a ver los productos? Lo haces con dos inputs ?
    o viene prefijado?

    Hola Josu,
    selecciono max y min de los articulos seleccionados. un Select. No viene
    prefijado.

    Saludos

    Carlos
    Hola Josu,
    me parece tambien interesante tu respuesta, pues asi lo habia resuelto
    al principio. El problema es que si muestras siempre 4 Rangos o cuatro
    intervalos el view de precios queda bastante feo. Por ejemplo tengo un
    rango que tiene 97 a 20000 (es el articulo mas caro). Si lo pongo en 4
    intervalos pues lo puedo mostrar pero 80% de los articulos estan en el
    primer rango y ademas sale algo como [100 - 5000][5000 - 10000]... Lo
    que me asusta a los visitantes.


    Muchas gracias y saludos

    Carlos
  • Juan Tondoventura at Sep 26, 2008 at 10:54 am
    Y si los divides en grupos equilibrados de elementos:
    Tienes de 97 a 20000 (es el articulo mas caro).
    Los elementos encontrados son 1250 (por ejemplo)
    Si lo pones en 4 grupos son 1250/4=312,5 elementos
    El primer grupo irá de 0-precio del elemento 313
    Segundo del precio 313 al 626
    Tercero del precio del 626 al 939
    Cuarto del 939 al 1252 (o sea hasta el último).


    Si los quieres redondear, basta con ver el precio de los elementos 313, 626
    , 939, redondearles el precio y reencajar los elementos por su valor.
    Quedaran grupos muy parecidos.

    Es otra idea.






    Carlos Medina <info@simply-networks.de>

    26/09/2008 12:41
    Por favor, responda a info






    Para: php-es@lists.php.net
    cc:
    Asunto: Re: [PHP-ES] Re: Algoritmo: como resolver un view de precios
    Clasificación: (Embedded image moved to file: pic26469.jpg)






    josu udaondo schrieb:
    Pues yo mas o menos lo haría si...a ver que te parece...

    Cojo el precio mas alto y el mas bajo, digamos 0 y 15000.
    Cuento los registros que tengo (pongamos 1000 productos) y divido la
    cantidad de registros entre el numero de márgenes que le voy a mostrar al
    cliente, por ejemplo quiero 4 rangos de precios, asi que los divido entre
    4...
    Me sale 250..
    Cojo el precio del producto 1... el del 250, el del 251 el del 500, el del
    501 el del 750, el del 751 y el del 1000
    Primer rango del producto 1 al precio del producto 250
    Segundo rango del producto 251 al 500
    Tercer rango del 501 al 750
    Cuarto rango del 751 al 1000

    Si quieres serializas los precios obtenidos redondeándolos a la cifra que
    quieras or ejemplo:
    Aunque te salga por ejemplo 117 euros pues pones del tipo de 0 a 100...
    cuentas los digitos que tiene el precio y lo normalizas...

    Si te sirve? Asi es bastante fácil creo yo...
    Luego dependiendo de del enlace que te pique ya haces entonces la select mas
    concreta del rango de productos entre esos precios definidos...






    -----Mensaje original-----
    De: Carlos Medina
    Enviado el: viernes, 26 de septiembre de 2008 12:21
    Para: php-es@lists.php.net
    Asunto: [PHP-ES] Re: Algoritmo: como resolver un view de precios

    josu udaondo schrieb:
    Como seleccionas el intervalo a ver los productos? Lo haces con dos
    inputs
    ?
    o viene prefijado?

    Hola Josu,
    selecciono max y min de los articulos seleccionados. un Select. No viene
    prefijado.

    Saludos

    Carlos
    Hola Josu,
    me parece tambien interesante tu respuesta, pues asi lo habia resuelto
    al principio. El problema es que si muestras siempre 4 Rangos o cuatro
    intervalos el view de precios queda bastante feo. Por ejemplo tengo un
    rango que tiene 97 a 20000 (es el articulo mas caro). Si lo pongo en 4
    intervalos pues lo puedo mostrar pero 80% de los articulos estan en el
    primer rango y ademas sale algo como [100 - 5000][5000 - 10000]... Lo
    que me asusta a los visitantes.


    Muchas gracias y saludos

    Carlos

    --
    PHP Spanish Localization Talk Mailing List (http://www.php.net/)
    To unsubscribe, visit: http://www.php.net/unsub.php


    _____________________________________________________________________
    Mensaje analizado y protegido por Telefonica Empresas


    Antes de imprimir piensa en tu responsabilidad y compromiso con el MEDIO
    AMBIENTE
  • Josu udaondo at Sep 26, 2008 at 10:54 am
    Si te asustan las cifras que pueden salir porque sean dispares entonces te
    aconsejo hacerlo de esta forma:

    En vez de usar el numero de registros para dividir los bloques, hazlo
    directamente con el precio...
    Precio minimo 1
    Precio maximo 20000

    Como establecer el rango. Quiero 4 rangos.
    Divido precio maximo o sea 20000 / 4 = 5000 euros
    De 1 a 5000
    De 5001 a 10000
    De 10001 a 15000
    de 15000
    Te evitas los querys de consulta para sacar los precios.. y el rango es
    uniforme mas o menos.



    -----Mensaje original-----
    De: Carlos Medina
    Enviado el: viernes, 26 de septiembre de 2008 12:42
    Para: php-es@lists.php.net
    Asunto: Re: [PHP-ES] Re: Algoritmo: como resolver un view de precios

    josu udaondo schrieb:
    Pues yo mas o menos lo haría si...a ver que te parece...

    Cojo el precio mas alto y el mas bajo, digamos 0 y 15000.
    Cuento los registros que tengo (pongamos 1000 productos) y divido la
    cantidad de registros entre el numero de márgenes que le voy a mostrar al
    cliente, por ejemplo quiero 4 rangos de precios, asi que los divido entre
    4...
    Me sale 250..
    Cojo el precio del producto 1... el del 250, el del 251 el del 500, el del
    501 el del 750, el del 751 y el del 1000
    Primer rango del producto 1 al precio del producto 250
    Segundo rango del producto 251 al 500
    Tercer rango del 501 al 750
    Cuarto rango del 751 al 1000

    Si quieres serializas los precios obtenidos redondeándolos a la cifra que
    quieras or ejemplo:
    Aunque te salga por ejemplo 117 euros pues pones del tipo de 0 a 100...
    cuentas los digitos que tiene el precio y lo normalizas...

    Si te sirve? Asi es bastante fácil creo yo...
    Luego dependiendo de del enlace que te pique ya haces entonces la select mas
    concreta del rango de productos entre esos precios definidos...






    -----Mensaje original-----
    De: Carlos Medina
    Enviado el: viernes, 26 de septiembre de 2008 12:21
    Para: php-es@lists.php.net
    Asunto: [PHP-ES] Re: Algoritmo: como resolver un view de precios

    josu udaondo schrieb:
    Como seleccionas el intervalo a ver los productos? Lo haces con dos
    inputs
    ?
    o viene prefijado?

    Hola Josu,
    selecciono max y min de los articulos seleccionados. un Select. No viene
    prefijado.

    Saludos

    Carlos
    Hola Josu,
    me parece tambien interesante tu respuesta, pues asi lo habia resuelto
    al principio. El problema es que si muestras siempre 4 Rangos o cuatro
    intervalos el view de precios queda bastante feo. Por ejemplo tengo un
    rango que tiene 97 a 20000 (es el articulo mas caro). Si lo pongo en 4
    intervalos pues lo puedo mostrar pero 80% de los articulos estan en el
    primer rango y ademas sale algo como [100 - 5000][5000 - 10000]... Lo
    que me asusta a los visitantes.


    Muchas gracias y saludos

    Carlos

    --
    PHP Spanish Localization Talk Mailing List (http://www.php.net/)
    To unsubscribe, visit: http://www.php.net/unsub.php
  • Carlos Medina at Sep 26, 2008 at 12:24 pm

    josu udaondo schrieb:
    Si te asustan las cifras que pueden salir porque sean dispares entonces te
    aconsejo hacerlo de esta forma:

    En vez de usar el numero de registros para dividir los bloques, hazlo
    directamente con el precio...
    Precio minimo 1
    Precio maximo 20000

    Como establecer el rango. Quiero 4 rangos.
    Divido precio maximo o sea 20000 / 4 = 5000 euros
    De 1 a 5000
    De 5001 a 10000
    De 10001 a 15000
    de 15000
    Te evitas los querys de consulta para sacar los precios.. y el rango es
    uniforme mas o menos.



    -----Mensaje original-----
    De: Carlos Medina
    Enviado el: viernes, 26 de septiembre de 2008 12:42
    Para: php-es@lists.php.net
    Asunto: Re: [PHP-ES] Re: Algoritmo: como resolver un view de precios

    josu udaondo schrieb:
    Pues yo mas o menos lo haría si...a ver que te parece...

    Cojo el precio mas alto y el mas bajo, digamos 0 y 15000.
    Cuento los registros que tengo (pongamos 1000 productos) y divido la
    cantidad de registros entre el numero de márgenes que le voy a mostrar al
    cliente, por ejemplo quiero 4 rangos de precios, asi que los divido entre
    4...
    Me sale 250..
    Cojo el precio del producto 1... el del 250, el del 251 el del 500, el del
    501 el del 750, el del 751 y el del 1000
    Primer rango del producto 1 al precio del producto 250
    Segundo rango del producto 251 al 500
    Tercer rango del 501 al 750
    Cuarto rango del 751 al 1000

    Si quieres serializas los precios obtenidos redondeándolos a la cifra que
    quieras or ejemplo:
    Aunque te salga por ejemplo 117 euros pues pones del tipo de 0 a 100...
    cuentas los digitos que tiene el precio y lo normalizas...

    Si te sirve? Asi es bastante fácil creo yo...
    Luego dependiendo de del enlace que te pique ya haces entonces la select mas
    concreta del rango de productos entre esos precios definidos...






    -----Mensaje original-----
    De: Carlos Medina
    Enviado el: viernes, 26 de septiembre de 2008 12:21
    Para: php-es@lists.php.net
    Asunto: [PHP-ES] Re: Algoritmo: como resolver un view de precios

    josu udaondo schrieb:
    Como seleccionas el intervalo a ver los productos? Lo haces con dos
    inputs
    ?
    o viene prefijado?

    Hola Josu,
    selecciono max y min de los articulos seleccionados. un Select. No viene
    prefijado.

    Saludos

    Carlos
    Hola Josu,
    me parece tambien interesante tu respuesta, pues asi lo habia resuelto
    al principio. El problema es que si muestras siempre 4 Rangos o cuatro
    intervalos el view de precios queda bastante feo. Por ejemplo tengo un
    rango que tiene 97 a 20000 (es el articulo mas caro). Si lo pongo en 4
    intervalos pues lo puedo mostrar pero 80% de los articulos estan en el
    primer rango y ademas sale algo como [100 - 5000][5000 - 10000]... Lo
    que me asusta a los visitantes.


    Muchas gracias y saludos

    Carlos
    Gracias a todos por las sugerencias. Veo que es un poco mas tedioso y
    pensaba hacerlo rapidamente. Pero creo que no se va a poder y que este
    fin de semana tengo tareita ;-)


    Gracias

    Saludos

    Carlos
  • Hari Seldon at Sep 26, 2008 at 9:59 am
    Si suponemos que tu tabla es algo así:

    Productos:
    id
    nombre
    ...
    precio

    La query para devolver todos los productos, podría ser algo así:

    select * from productos where precio >= lim_minimo and precio <
    limite_maximo order by precio

    Poniendo limite_minimo y limite_maximo como 0 y un número muy alto.

    Una vez obtengas el resulset, puedes obtener el más barato y el más caro
    simplemente navegando al primero, y al último.

    Una vez tengas:
    precio_mas_barato
    precio_mas_caro

    Tendrías que calcular algo así:

    limite_mas_barato = redondeo por abajo precio_mas_barato

    limite_mas_caro = redondeo hacia arriba precio_mas_caro

    Los redondeos, van a ser a "tantos ceros" como dígitos tenga el precio
    más barato o más caro; por ejemplo, si el precio más barato es 15, el
    redondeo debería de ser a 10; si el precio más barato es 199, el
    redondeo debería de ser a 100; si el precio más barato es 599, redondeo
    a 500; etc etc. Hacia arriba por lo que muestras, se redondea siempre
    como > que .

    El problema va a estar en calcular los intervalos, que es dónde se
    complica la cosa, por que en los casos que pones, tienes:

    - caso A:

    precio_mas_barato = 0,9 => limite_mas_barato = 0
    precio_mas_caro = 15.000 => limite_mas_caro = 15.000

    diferencia precios = 14.999,1 => redondeo = 15.000

    Necesitas los rangos:
    1-100
    100-1.000
    1.000-5.000
    5.000-10.000
    10.000
    Yo creo que aquí lo correcto un rango como:
    < 1.000
    1.000-5.000
    5.000-10.000
    10.000-15.000
    15.000
    - caso B:

    Y que después, si van a los menores de 1.000, se filtren ahí de nuevo
    los precios
    el otro caso:

    precio_mas_barato = 743 => limite_mas_barato = 700
    precio_mas_caro = 1000 => limite_mas_caro = 1000

    diferencia precios = 257 => redondeo = 300

    Necesitas los rangos:
    700-800
    800-900
    900-1.000
    1.000
    Creo que lo más sencillo sería establecer los intervalos, según el
    número de cifras de la diferencia entre precios; por ejemplo, en el caso
    A, la diferencia es de 15.000; por tanto, defines intervalos de 5.000 en
    5.000, pero como tienes un cambio de miles a cientos, defines el
    intervalo adicional 0-1.000; o sea, algo así:
    SI
    número_digitos_redondeo_diferencia = 5
    ENTONCES
    diferencia_entre_intervalos = 5.000
    intervalo_adicional = 0 - 1.000

    Realmente, el intervalo adicional resulta de ir desde el redondeo del
    precio más bajo, hasta el número más pequeño del número con el número de
    dígitos de la diferencia entre precios menos uno (5-1 = 4 => 1.000); ese
    intervalo adicional hay que agregarlo en el caso de que el precio más
    bajo esté dentro de dicho intervalo adicional, algo así:

    SI
    número_digitos_redondeo_diferencia = 5
    ENTONCES
    diferencia_entre_intervalos = 5.000
    intervalos = [(1.000 - 5.000), (5.000 - 10.000), (10.000 - 15.000),
    (15.000 - infinito)]
    SI
    precio_mas_bajo NO EN intervalos[0]
    ENTONCES
    calculo_intervalo_adicional:
    numero_digitos_intervalo_adicional = 5 - 1 = 4
    limite_maximo_intervalo_adicional = 1.000
    intervalo_adicional = (0 - 1.000)
    intervalos = [(1.000 - 5.000), (5.000 - 10.000), (10.000 -
    15.000), (15.000 - infinito)] MAS intervalo_adicional


    En el caso B, tendríamos:
    diferencia_precios = 300
    número_digitos_redondeo_diferencia = 3
    SI
    número_digitos_redondeo_diferencia = 3
    ENTONCES
    diferencia_entre_intervalos = 100
    intervalos = [(700 - 800), (800 - 900), (900 - 1.000), (1.000 -
    infinito)]

    Así a bote pronto no se me ocurre ningún caso dónde esto pueda no
    funcionar.. Pero seguro que lo hay.

    Después, simplemente sería hacer las query de nuevo con los nuevos
    límites (si la tienes en un command y tal podrías inclusive hasta
    cachearla en algún lado), y pasar los parámetros que te interesan

    De todos modos, no se me ocurre ahora, pero matemáticamente tiene que
    haber una forma mejor.

    A ver si a alguien se le ocurre :)

    Saludos

    Carlos Medina escribió:
    Buenos dias,
    me gustaria saber si alguno de ustedes tiene una idea de como resolver
    este problemilla. No es muy dificil pero no tengo una idea fija de
    como resolverlo.

    En una base de datos tengo una cantidad media de 15.000 articulos con
    sus precios. El cliente me ha pedido hacer un box para seleccionar
    articulos segun los precios por lo que es necesario mostrarlos en
    intervalos como:

    10 - 100
    100 - 500
    500 - 1000
    1000
    Pues bien el problema es que tenemos un sistema de filtrado que
    selecciona los articulos segun otros atributos, por ejemplo Marca y
    grupo.

    La idea es calcular los precios de manera dinamica segun el resultado
    del query. Por ejemplo:

    El range del precio es de 0.9 a 15.000. Necesito un algoritmo que me
    haga los siguiente:

    1 - 100
    100 - 1000
    1000 - 5000
    5000 - 10000
    10000
    Si por el contrario tengo un range como 743 - 1000 solo necesitaria

    700 - 800
    800 - 900
    900
    Si alguien sabe como hacer esto le estaria muy agradecido. Ideas son
    bienvenidas.


    Saludos

    Carlos Medina
  • Carlos Medina at Sep 26, 2008 at 10:30 am

    Hari Seldon schrieb:
    Si suponemos que tu tabla es algo así:

    Productos:
    id
    nombre
    ...
    precio

    La query para devolver todos los productos, podría ser algo así:

    select * from productos where precio >= lim_minimo and precio <
    limite_maximo order by precio

    Poniendo limite_minimo y limite_maximo como 0 y un número muy alto.

    Una vez obtengas el resulset, puedes obtener el más barato y el más caro
    simplemente navegando al primero, y al último.

    Una vez tengas:
    precio_mas_barato
    precio_mas_caro

    Tendrías que calcular algo así:

    limite_mas_barato = redondeo por abajo precio_mas_barato

    limite_mas_caro = redondeo hacia arriba precio_mas_caro

    Los redondeos, van a ser a "tantos ceros" como dígitos tenga el precio
    más barato o más caro; por ejemplo, si el precio más barato es 15, el
    redondeo debería de ser a 10; si el precio más barato es 199, el
    redondeo debería de ser a 100; si el precio más barato es 599, redondeo
    a 500; etc etc. Hacia arriba por lo que muestras, se redondea siempre
    como > que .

    El problema va a estar en calcular los intervalos, que es dónde se
    complica la cosa, por que en los casos que pones, tienes:

    - caso A:

    precio_mas_barato = 0,9 => limite_mas_barato = 0
    precio_mas_caro = 15.000 => limite_mas_caro = 15.000

    diferencia precios = 14.999,1 => redondeo = 15.000

    Necesitas los rangos:
    1-100
    100-1.000
    1.000-5.000
    5.000-10.000
    10.000
    Yo creo que aquí lo correcto un rango como:
    < 1.000
    1.000-5.000
    5.000-10.000
    10.000-15.000
    15.000
    - caso B:

    Y que después, si van a los menores de 1.000, se filtren ahí de nuevo
    los precios
    el otro caso:

    precio_mas_barato = 743 => limite_mas_barato = 700
    precio_mas_caro = 1000 => limite_mas_caro = 1000

    diferencia precios = 257 => redondeo = 300

    Necesitas los rangos:
    700-800
    800-900
    900-1.000
    1.000
    Creo que lo más sencillo sería establecer los intervalos, según el
    número de cifras de la diferencia entre precios; por ejemplo, en el caso
    A, la diferencia es de 15.000; por tanto, defines intervalos de 5.000 en
    5.000, pero como tienes un cambio de miles a cientos, defines el
    intervalo adicional 0-1.000; o sea, algo así:
    SI
    número_digitos_redondeo_diferencia = 5
    ENTONCES
    diferencia_entre_intervalos = 5.000
    intervalo_adicional = 0 - 1.000

    Realmente, el intervalo adicional resulta de ir desde el redondeo del
    precio más bajo, hasta el número más pequeño del número con el número de
    dígitos de la diferencia entre precios menos uno (5-1 = 4 => 1.000); ese
    intervalo adicional hay que agregarlo en el caso de que el precio más
    bajo esté dentro de dicho intervalo adicional, algo así:

    SI
    número_digitos_redondeo_diferencia = 5
    ENTONCES
    diferencia_entre_intervalos = 5.000
    intervalos = [(1.000 - 5.000), (5.000 - 10.000), (10.000 - 15.000),
    (15.000 - infinito)]
    SI
    precio_mas_bajo NO EN intervalos[0]
    ENTONCES
    calculo_intervalo_adicional:
    numero_digitos_intervalo_adicional = 5 - 1 = 4
    limite_maximo_intervalo_adicional = 1.000
    intervalo_adicional = (0 - 1.000)
    intervalos = [(1.000 - 5.000), (5.000 - 10.000), (10.000 -
    15.000), (15.000 - infinito)] MAS intervalo_adicional


    En el caso B, tendríamos:
    diferencia_precios = 300
    número_digitos_redondeo_diferencia = 3
    SI
    número_digitos_redondeo_diferencia = 3
    ENTONCES
    diferencia_entre_intervalos = 100
    intervalos = [(700 - 800), (800 - 900), (900 - 1.000), (1.000 -
    infinito)]

    Así a bote pronto no se me ocurre ningún caso dónde esto pueda no
    funcionar.. Pero seguro que lo hay.

    Después, simplemente sería hacer las query de nuevo con los nuevos
    límites (si la tienes en un command y tal podrías inclusive hasta
    cachearla en algún lado), y pasar los parámetros que te interesan

    De todos modos, no se me ocurre ahora, pero matemáticamente tiene que
    haber una forma mejor.

    A ver si a alguien se le ocurre :)

    Saludos

    Carlos Medina escribió:
    Buenos dias,
    me gustaria saber si alguno de ustedes tiene una idea de como resolver
    este problemilla. No es muy dificil pero no tengo una idea fija de
    como resolverlo.

    En una base de datos tengo una cantidad media de 15.000 articulos con
    sus precios. El cliente me ha pedido hacer un box para seleccionar
    articulos segun los precios por lo que es necesario mostrarlos en
    intervalos como:

    10 - 100
    100 - 500
    500 - 1000
    1000
    Pues bien el problema es que tenemos un sistema de filtrado que
    selecciona los articulos segun otros atributos, por ejemplo Marca y
    grupo.

    La idea es calcular los precios de manera dinamica segun el resultado
    del query. Por ejemplo:

    El range del precio es de 0.9 a 15.000. Necesito un algoritmo que me
    haga los siguiente:

    1 - 100
    100 - 1000
    1000 - 5000
    5000 - 10000
    10000
    Si por el contrario tengo un range como 743 - 1000 solo necesitaria

    700 - 800
    800 - 900
    900
    Si alguien sabe como hacer esto le estaria muy agradecido. Ideas son
    bienvenidas.


    Saludos

    Carlos Medina
    Hola Hari,
    gracias por tu respuesta. Pues si estaba pensando ahora en algo asi
    parecido a lo que me has sugerido. Matematicamente hablando hay que
    sacar algo asi como la distribucion o reparticion de los precios en una
    serie dada. Esto es estadistica y va mas hacia la probabilidad ( algo
    como pdf - probability density function ) pero que no tengo tiempo ni
    ganas de usar porque lo vuelve todo muy dificil.

    Me habia puesto intervalos de 2000 para cualquier serie:

    [0-2000] [2000 - 4000] [2000 - 6000]...

    Pienso que si tengo una cantidad dada mayor a 10000 muestro como has
    dicho un intervalo adicional [> 10000]. Luego veo el minimo y lo calculo
    en una de las categorias que he dado antes. Ejemplo: Precios estan entre
    700 y 1000 pues caen en la categoria [0 - 2000]. Esta categoria tiene a
    su vez Intervalos para mostrar mas el intervalo adicional [0 - 100][100
    - 500][500 - 1000][ > 1000 ]


    Creo que con esto tendre una primera version en la que basarme.

    Gracias nuevamente y muchos saludos. Te dire como lo he resuelto si no
    me he vuelto loco primero... Tiene que estar listo para el Lunes ;-)


    Carlos
  • Carlos Medina at Sep 30, 2008 at 6:36 am
    Buenos dias,
    les comento para quienes esten interesados en saber, como solucione por
    ahora el view de los precios:

    Puse primero un limite virtual de 10.000 ¤ como precio maximo
    Saque la cantidad total de articulos en un segmento especificado de
    articulos (ej. bayonetas) y lo asocie a un factor. Este Factor lo uso
    para dividir el view en segmentos a mostrar (ej. 10.000 articulos se
    dividen en 5 segmentos, 8500 se dividen en cuatro, 6000 se dividen en
    tres y asi).
    Luego Lanzo un SQL preguntando los precios de todos los articulos en
    cada segmento.
    Luego muestro cada segmento uno detras del otro.


    Saludos

    Carlos

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupphp-general-es @
categoriesphp
postedSep 26, '08 at 7:34a
activeSep 30, '08 at 6:36a
posts11
users4
websitephp.net

People

Translate

site design / logo © 2022 Grokbase