Maison >développement back-end >tutoriel php >Comment implémenter la sélection aléatoire pondérée dans MySQL ?

Comment implémenter la sélection aléatoire pondérée dans MySQL ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-09 20:25:02950parcourir

How to Implement Weighted Random Selection in 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn