Maison >développement back-end >tutoriel php >Comment implémenter la sélection aléatoire pondérée dans MySQL ?
Sélection aléatoire pondérée dans MySQL
Un utilisateur cherche à récupérer une entrée aléatoire d'une table MySQL pondérée selon la colonne "Multiplicateur". Un multiplicateur de 0 indique aucune pondération, tandis que des valeurs plus élevées augmentent la probabilité de sélection.
La requête d'origine utilisant SELECT et RAND() n'a pas la capacité d'implémenter la pondération. Pour surmonter cette limitation, une approche alternative a été identifiée :
ORDER BY -LOG(1.0 - RAND()) / Multiplier
Cette formule attribue efficacement des valeurs aléatoires plus élevées aux entrées avec des multiplicateurs plus élevés. Il est important de noter que les multiplicateurs ne peuvent pas être définis sur 0 car cela entraînerait une erreur de division par zéro. Pour exclure les entrées avec un multiplicateur de 0, une clause WHERE peut être appliquée :
WHERE Multiplier > 0
En combinant ces éléments, la requête suivante obtient une sélection aléatoire pondérée :
SELECT * FROM table WHERE Multiplier > 0 ORDER BY -LOG(1.0 - RAND()) / Multiplier LIMIT 1
Cette formule garantit que les candidatures avec des multiplicateurs plus élevés ont plus de chances d'être sélectionnées, tout en maintenant l'intégrité du processus de sélection aléatoire.
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!