私もこれを行う方法を考えようとしています。現時点での私の考えは、次の3つの選択肢です。
1)基準を無視してランダムな行を選択し、アプリケーションレベルで一致しない行を破棄し、必要に応じてさらにランダムな行を選択します。この方法は、基準がテーブル内の多くの行、おそらく20%以上(ベンチマークが必要)と一致する場合に効果的です。
2)基準に従って行を選択し、1からcount(*)までの乱数(アプリケーションで決定された乱数)に基づいて行を選択します。これは、基準に一致するデータが均等に分散されている場合に効果的ですが、たとえば日付範囲を選択している場合はひどく失敗し、乱数の大部分はこの範囲外のレコードに該当します。
3)私の現在のお気に入りだけでなく、ほとんどの仕事。ランダムレコードを選択するために使用する予定の基準のすべての組み合わせについて、その基準の特別なテーブルにレコードを挿入します。次に、特別なテーブルからランダムなレコードを選択し、それらをデータに戻します。たとえば、次のようなテーブルがあるとします。
テーブル猫:名前、年齢、eye_colour、fur_type
茶色の毛皮の猫をランダムに選択できるようにする場合は、次のようなテーブルが必要です。
テーブルcats_with_brown_fur:id(autonumber)、cat_fk
次に、自動番号IDに基づいてこのテーブルからランダムなレコードを選択できます。これにより、高速になり、均等に分散されたランダムな結果が生成されます。ただし、実際、多くの基準セットから選択すると、これらのテーブルを維持するためのオーバーヘッドが発生します。
とにかく、それが私の現在の見方です。幸運を