Foros del Web » Bases de Datos » Mysql »

Resultados con "peso" específico

Estas en el tema de Resultados con "peso" específico en el foro de Mysql en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 25/05/2011, 01:38
Avatar de Triby
Foto-mod
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 9.013
Antigüedad: 6 años, 2 meses
Puntos: 1951
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
  #2 (permalink)  
Antiguo 25/05/2011, 02:00
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.810
Antigüedad: 6 años, 7 meses
Puntos: 561
Respuesta: Resultados con "peso" específico

En el manual en ingles te dan una solución si he entendido bien tu problema.

http://dev.mysql.com/doc/refman/5.0/...#function_rand

Cita:
To obtain a random integer R in the range i <= R < j, use the expression FLOOR(i + RAND() * (j – i)). For example, to obtain a random integer in the range the range 7 <= R < 12, you could use the following statement:

SELECT FLOOR(7 + (RAND() * 5));

RAND() in a WHERE clause is re-evaluated every time the WHERE is executed.
en principio FLOOR(1 + (RAND() * 2)) debería dar 1 o 2 al 50%...
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 25/05/2011, 10:38
Avatar de Triby
Foto-mod
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 9.013
Antigüedad: 6 años, 2 meses
Puntos: 1951
Respuesta: Resultados con "peso" específico

Gracias, quimfv, voy a probar tu sugerencia.
__________________
- León, Guanajuato
- GV-Foto

Etiquetas: peso, resultados
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 15:22.
SEO by vBSEO 3.3.2