Este tipo
hace la misma pregunta. Dice lo mismo que Frank, pero las ponderaciones no salen bien y en los comentarios alguien sugiere usar ORDER BY -LOG(1.0 - RAND()) / Multiplier
, que en mis pruebas dio resultados bastante perfectos.
(Si algún matemático quiere explicar por qué esto es correcto, ¡ilumíname! Pero funciona).
La desventaja sería que no podría establecer la ponderación en 0 para deshabilitar temporalmente una opción, ya que terminaría dividiendo por cero. Pero siempre puedes filtrarlo con un WHERE Multiplier > 0
.