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
Libérer: 2024-11-09 20:25:02
original
992 Les gens l'ont consulté

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal