Maison > Article > développement back-end > Comment pondérer les sélections aléatoires dans MySQL ?
Pondération des sélections aléatoires dans MySQL
Lorsque vous travaillez avec de grands ensembles de données, il peut être nécessaire de sélectionner une entrée au hasard tout en tenant compte du poids associé à chaque entrée. Dans MySQL, cela peut être réalisé en utilisant une combinaison de fonctions et de multiplicateurs de pondération.
Pour sélectionner une seule entrée dans une table, utilisez l'instruction SELECT. Pour randomiser la sélection, utilisez la fonction RAND(). Cependant, pour introduire la pondération, une étape supplémentaire est nécessaire.
Considérons un tableau avec des entrées et une colonne « Multiplicateur » qui représente leurs poids. Pour pondérer la sélection vers des entrées avec des multiplicateurs plus élevés, modifiez l'instruction avec la syntaxe suivante :
SELECT * FROM table_name ORDER BY -LOG(1.0 - RAND()) / Multiplier LIMIT 1;
Dans cette expression, la clause ORDER BY trie les résultats par ordre croissant de la valeur calculée. La valeur est obtenue en divisant le logarithme négatif d'un nombre aléatoire compris entre 0 et 1 par le multiplicateur. Les entrées avec des multiplicateurs plus élevés auront des valeurs calculées plus petites et apparaîtront plus tôt dans la liste triée. La clause LIMIT 1 sélectionne ensuite l'entrée supérieure comme sélection aléatoire pondérée.
Notez que cette méthode n'est pas affectée par les valeurs de multiplicateur de 0, car un multiplicateur nul entraînera toujours l'apparition de l'entrée à la fin de la liste triée. Si vous le souhaitez, les entrées avec un multiplicateur de 0 peuvent être exclues de la sélection à l'aide d'une clause WHERE :
SELECT * FROM table_name WHERE Multiplier > 0 ORDER BY -LOG(1.0 - RAND()) / Multiplier LIMIT 1;
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!