2009-03-23 15 views
0

私はMCQモジュールで作業しており、データベースからランダムな質問を取得する必要があります。問題は、重複しているようです。PHPで一意の乱数を生成するにはどうすればよいですか?

+0

編集競争条件の謝罪RichB – ryeguy

+0

@ryeguy:私はより良い編集があると思うので、私は転がりました。私のことを気軽に付け加えてください。 – GEOCHET

+0

あなたの質問は頻繁に変更されるのですか? –

答えて

6

データベースからフェッチする場合は、SQLを使用してジョブを実行します。例えば

SELECT * FROM questions ORDER BY RAND() LIMIT 20 
0

これ以上の情報がなければ、私は初歩的な解決策を提案することができます。 (しかし、あなたの質問をより多くの情報で更新してください)

私はユーザーがいると推測しています。

ユーザーがいない場合は、SESSION_IDをそのユーザーのユーザー識別子として使用できます。

初めて質問を取得してユーザーが回答すると、保存する必要のある情報を保存してから、ユーザーのIDと質問のIDをテーブルに保存します。

次の質問をフェッチするときに、この新しいテーブルに質問IDがあるかどうかを確認します。

6

質問をランダムに並べ替えるのではなく、質問をシャッフルしたいと思うように聞こえます。だからあなたのアルゴリズムは、このようなものになります。

  1. 表示したいすべての質問(または質問キー)を取得します。
  2. チェックアウトシャッフルのためのシャッフルため

でそれらに/表示を取得し、それらをシャッフル:MySQLを使用していて、データの合理的な少量を持っている場合は、次のことができFisher-Yates shuffle algorithm

1

でも参照RAND()

+0

他のRDBMSにも同様の構文があります。たとえば、MSSQLでは「ORDER BY NEWID()」、Oracleでは「ORDER BY DBMS_CRYPTO.randominteger」を使用できます。 –

0

あなたが行の非常に多くを持っている場合は、クエリでフェッチその後、0と1の間の数値を格納し、テーブルに列を追加することができます:

20のランダム質問(繰り返しなし)をフェッチ
SELECT * FROM `mytable` WHERE `randcolumn` > RAND() LIMIT 20 

これは、データベースがテーブル全体をランダムに並べ替える必要がなく、わずか20行しか用意できないことを意味します。

関連する問題