Sélection aléatoire de lignes avec considération pondérée
SQL fournit un moyen de sélectionner aléatoirement une ligne dans une table. Cependant, prendre en compte un poids pour chaque ligne pour influencer la probabilité de sélection n'est pas simple.
Une méthode pour y parvenir est l'échantillonnage pondéré en réservoir, qui est une technique élégante et efficace pour sélectionner des éléments d'un ensemble avec remplacement. et avec des probabilités proportionnelles à leurs poids.
L'implémentation en SQL implique :
Cette requête accomplit ceci :
SELECT id, -LOG(RAND()) / weight AS priority FROM your_table ORDER BY priority LIMIT 1;
Dans cette requête, LOG(RAND()) génère un résultat aléatoire uniformément distribué nombre compris entre 0 et 1. Prendre le logarithme négatif de ce nombre inverse effectivement sa valeur, ce qui donne un nombre plus grand pour des valeurs aléatoires plus petites. En divisant cette valeur inversée par le poids de la ligne, nous obtenons une priorité plus faible pour les lignes avec des poids plus élevés.
Par conséquent, les lignes avec des poids plus élevés auront un score de priorité plus faible et auront plus de chances d'être en haut des résultats triés, augmentant ainsi leurs chances d'être sélectionnés. Cette approche garantit que la probabilité de sélection de chaque ligne est proportionnelle à son poids.
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!