Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/05/2011, 01:38
Avatar de Triby
Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Resultados con "peso" específico

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. -- 1: Al azar... convencional
  2.  
  3. -- 2: Multiplicando por el campo peso
  4. SELECT * FROM tabla ORDER BY weight * RAND() DESC LIMIT 1
  5.  
  6. -- 3: Restando el valor de RAND de 1.0 y dividiendolo entre el campo peso
  7. SELECT * FROM tabla ORDER BY -LOG(1.0 - RAND()) / weight LIMIT 1

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.
__________________
- León, Guanajuato
- GV-Foto