ホームページ >データベース >mysql チュートリアル >重み付けされた確率を使用してテーブルから行をランダムに選択するにはどうすればよいですか?
問題:
「id」などの列を持つテーブルがあると想像してください。 「内容量」と「重量」です。 「重み」の値を考慮して、このテーブルから行をランダムに選択したいとします。たとえば、3 つの行が存在する場合:
id | content | weight |
---|---|---|
1 | some content | 60 |
2 | other content | 40 |
3 | something | 100 |
最初の行の選択の確率は 30%、2 行目の選択の確率は 20%、3 行目の選択の確率は 50% です。
解決策:
1 つのアプローチは、加重リザーバーを適用することです。サンプリング:
SELECT id, -LOG(RAND()) / weight AS priority FROM your_table ORDER BY priority LIMIT 1;
このメソッドを使用すると、重みに比例する確率で多くの要素から 1 つを選択できます。これは、単一の要素を選択する場合に効果的に機能します。
この手法については、[加重リザーバー サンプリング](https://bit.ly/weighted-res-sampling) の記事で詳しく説明されています。この記事では POW(RAND(), 1/weight) の最大値を選択していますが、これは -LOG(RAND()) /weight の最小値を選択するのと同じであることに注意してください。
以上が重み付けされた確率を使用してテーブルから行をランダムに選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。