Questo ragazzo
fa la stessa domanda. Dice lo stesso di Frank, ma i pesi non escono bene e nei commenti qualcuno suggerisce di usare ORDER BY -LOG(1.0 - RAND()) / Multiplier
, che nei miei test ha dato risultati praticamente perfetti.
(Se qualche matematico là fuori vuole spiegare perché questo è corretto, per favore illuminami! Ma funziona.)
Lo svantaggio sarebbe che non è possibile impostare la ponderazione su 0 per disabilitare temporaneamente un'opzione, poiché si finirebbe per dividere per zero. Ma puoi sempre filtrarlo con un WHERE Multiplier > 0
.