MySQL での加重ランダム選択
ユーザーは、MySQL テーブルから「Multiplier」列に従って重み付けされたランダム エントリを取得しようとします。乗数 0 は重み付けがないことを示し、値が大きいほど選択の可能性が高くなります。
SELECT と RAND() を使用する元のクエリには重み付けを実装する機能がありません。この制限を克服するために、別のアプローチが特定されました。
ORDER BY -LOG(1.0 - RAND()) / Multiplier
この式は、より高い乗数を持つエントリにより高いランダム値を効果的に割り当てます。乗数を 0 に設定すると、ゼロ除算エラーが発生するため、0 に設定できないことに注意することが重要です。乗数が 0 のエントリを除外するには、WHERE 句を適用できます。
WHERE Multiplier > 0
これらの要素を組み合わせることで、次のクエリは重み付けされたランダム選択を実現します。
SELECT * FROM table WHERE Multiplier > 0 ORDER BY -LOG(1.0 - RAND()) / Multiplier LIMIT 1
この式により、次のことが保証されます。ランダム選択プロセスの完全性を維持しながら、より高い乗数を持つエントリが選択される可能性が高くなります。
以上がMySQL で加重ランダム選択を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。