ホームページ >バックエンド開発 >PHPチュートリアル >MySQL でランダムな選択に重みを付けるにはどうすればよいですか?

MySQL でランダムな選択に重みを付けるにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-17 13:30:02540ブラウズ

How to Weight Random Selections in MySQL?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。