問題:
想像有一個包含「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中文網其他相關文章!