Sélection aléatoire avec résultats pondérés dans MySQL
Ce problème implique la sélection d'une entrée aléatoire dans une table MySQL où les lignes sont pondérées en fonction d'un " Colonne "Multiplicateur". Les approches conventionnelles utilisant RAND() ne tiennent pas compte de cette pondération.
Pour résoudre ce problème, un utilisateur a suggéré une approche impliquant ORDER BY -LOG(1.0 - RAND()) / Multiplier. Cette formule ajuste efficacement le processus de randomisation pour donner aux lignes pondérées une probabilité plus élevée d'être sélectionnées.
La formule calcule une valeur qui représente le « caractère aléatoire » pour chaque ligne, où une valeur inférieure indique une probabilité plus élevée. En divisant cette valeur par le « Multiplicateur », les lignes avec un multiplicateur plus élevé reçoivent effectivement un « caractère aléatoire » plus faible et donc une plus grande chance d'être choisies.
L'inconvénient de cette méthode est qu'il n'est pas possible de la désactiver. une ligne en réglant le multiplicateur à 0, car cela entraînerait une division par zéro. Cependant, cette limitation peut être surmontée en filtrant les lignes avec WHERE Multiplier > 0 pour exclure ceux avec un multiplicateur nul.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!