问题:
想象有一个包含“id”等列的表, “内容”和“重量”。您想要从该表中随机选择一行,考虑“权重”值。例如,如果存在三行:
id | content | weight |
---|---|---|
1 | some content | 60 |
2 | other content | 40 |
3 | something | 100 |
第一行有 30% 的机会被选择,第二行有 20% 的机会,第三行有 50% 的机会。
解决方案:
一种方法是应用加权水库采样:
SELECT id, -LOG(RAND()) / weight AS priority FROM your_table ORDER BY priority LIMIT 1;
此方法允许您从众多元素中选择一个,其概率与其权重成正比。它可以有效地选择单个元素。
本文详细介绍了该技术:[加权储层采样](https://bit.ly/weighted-res-sampling)。注意,文章选择了 POW(RAND(), 1/weight) 的最大值,相当于选择了 -LOG(RAND()) / Weight 的最小值。
以上是如何使用加权概率从表中随机选择一行?的详细内容。更多信息请关注PHP中文网其他相关文章!