Hola, tengo un problema con un sistema de publicidad que determina el anuncio a mostrar ordenando por RAND(), pero en zonas donde hay solo dos anuncios la diferencia entre ambos (mostrados) es muy grande, por lo que me gustaria tratar de equilibrarlos, tal vez agregando un campo para aumentar/disminuir las probabilidades de cada uno.
Lo que he probado:
Código MySQL:
Ver original-- 1: Al azar... convencional
-- 2: Multiplicando por el campo peso
-- 3: Restando el valor de RAND de 1.0 y dividiendolo entre el campo peso
Hablando con mi cliente, comentaba que las probabilidades (de la opcion 1) son de 50/50, en lo que estoy completamente de acuerdo, pero los resultados son completamente enemigos de esa supuesta probabilidad y a ojo del cliente, se trata de "un error de programacion".
La opcion 2 reduce mucho las probabilidades para los registros que tienen menor peso, de hecho, es algo exagerado, por lo que ya la tengo descartada.
La opcion 3 parece ser mas efectiva, pero con solo dos registros disponibles no he notado mucha diferencia respecto al RAND()... aunque voy a seguir probandolo.
Otra opcion seria mostrar los anuncios secuencialmente, es decir, guardar en algun lado el ultimo mostrado y pasar al siguiente en la proxima peticion... esto no es tan viable, porque hay otros factores que determinan el anuncio a mostrar como pagina del sitio y procedencia del visitante entre otras variables.
Se aceptan y se agradecen todas las sugerencias, criticas, etc.