プロが教える店舗&オフィスのセキュリティ対策術

Perlで日替わりのピックアップシステムを作っています。

60件(掲載期限が2週間)程度のデータベースの中から、ランダムに
3件のデータ(重複しない)を表示するピックアップシステムを作っ
ています。

なるべく同頻度でデータを表示させたいのですが、randを使うと
同じデータが複数回表示されてしまったりします。

これを防ぐにはどのようなプログラムを組めばいいでしょうか。

A 回答 (2件)

データの数が60件しかないため、randをしても偏ってしまうのだと思います。


最近のPerlはsrandは関係ないはずなので、根本的な問題はサンプルの数が少ないことだと思います。

そこでですが、データベースに表示回数のフィールドを用意して、何回ピックしたか保存してみてはどうでしょう。
この値が低いデータを優先的に選択するようにします。

まずは最小値の取得

表示回数が最小値の行数を取得

行数が2以下 YES→ 最小値の行をすべてピック、表示回数が最小値+1の行数を取得 ↓
NO

その行数を最大値としてrandでランダムに行を選択してピック、表示回数を+1し、randの最大値の行数を-1する。 以降3つピックされるまで繰り返す。

これによって、20日で確実に同頻度でデータをピック出来ると思います。
    • good
    • 0

スクリプト冒頭に


srand(time)
を追加して、毎回シードを変更するようにして下さい。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!