Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL :sélectionnez une entrée aléatoire, mais pondérez-la en fonction de certaines entrées

Ce type pose la même question. Il dit la même chose que Frank, mais les pondérations ne sont pas correctes et dans les commentaires, quelqu'un suggère d'utiliser ORDER BY -LOG(1.0 - RAND()) / Multiplier , qui lors de mes tests a donné des résultats quasiment parfaits.

(Si des mathématiciens veulent expliquer pourquoi c'est correct, s'il vous plaît éclairez-moi ! Mais ça marche.)

L'inconvénient serait que vous ne pourriez pas définir la pondération sur 0 pour désactiver temporairement une option, car vous finiriez par diviser par zéro. Mais vous pouvez toujours le filtrer avec un WHERE Multiplier > 0 .