MySQL でのランダム選択の重み付け
大規模なデータセットを扱う場合、関連する重みを考慮しながらエントリをランダムに選択する必要がある場合があります。各エントリーごとに。 MySQL では、これは関数と重み付け乗数を組み合わせて使用することで実現できます。
テーブルから 1 つのエントリを選択するには、SELECT ステートメントを使用します。選択をランダム化するには、RAND() 関数を使用します。ただし、重み付けを導入するには、追加の手順が必要です。
エントリとその重みを表す「乗数」列を含むテーブルを考えてみましょう。より高い乗数を持つエントリに向けて選択を重み付けするには、次の構文を使用してステートメントを変更します。
SELECT * FROM table_name ORDER BY -LOG(1.0 - RAND()) / Multiplier LIMIT 1;
この式では、ORDER BY 句が計算値の昇順で結果を並べ替えます。この値は、0 から 1 までの乱数の負の対数を乗数で割ることによって得られます。乗数が大きいエントリは計算値が小さくなり、並べ替えられたリストの先頭に表示されます。次に、LIMIT 1 句は、重み付きランダム選択として最上位のエントリを選択します。
乗数が 0 の場合でも、エントリはエントリの最後に表示されるため、このメソッドは乗数の値 0 の影響を受けないことに注意してください。ソートされたリスト。必要に応じて、WHERE 句を使用して乗数が 0 のエントリを選択から除外できます:
SELECT * FROM table_name WHERE Multiplier > 0 ORDER BY -LOG(1.0 - RAND()) / Multiplier LIMIT 1;
以上がMySQL でランダムな選択に重みを付けるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。