ok, ho inserito per ogni banner tot_click e tot_impression.
la query è questa
codice:
select
id
from
banner
where
tipo=".$this->id."
and attivo=true
and if(conteggio<>3,contatore>0,scadenza >= date_add(curdate(), interval -30 day))
order by rand()
conteggio=3 significa che conteggio il banner per data (1 anno, 6 mesi)
1 o 2 significa che conteggio il banner a impression o click (quindi decremento di conseguenza il contatore)
se ora ordinassi per CTR (click/impression) limitando 0,10 visualizzerei sempre quelli con maggior ctr.
è possibile fare una cosa del tipo:
ordino per ctr decrescente con una percentuale del 30% di probabilità e con una percentuale del 70% ordino in maniera rand() cosi favorisco leggermente quelli più cliccati ma do a tutti un'alta probabilità di essere visualizzati