2016-03-25 4 views
0

3つの質問タイプがあるとします。真または偽ToF、複数選択MCと完了。テーブルデータベースの動的ランダム行

ここでは、ランダムに10個の質問を真または偽、5個の質問多項式および2個の質問(これらの数字は静的ではなく、実行関数の変数になります)を無作為に得たいと考えています。

私のテーブルには、このようなものです:私がこれまで試したどのような

+-----+----------------------------------------------------+----------+--------+ 
| id | question           | type  | examId | 
+-----+----------------------------------------------------+----------+--------+ 
| 1 | true or false question 1       | ToF  |  1 | 
| 2 | true or false question 2       | ToF  |  1 | 
| 3 | true or false question 3       | ToF  |  1 | 
| 4 | true or false question 4       | ToF  |  1 | 
| 5 | true or false question 5       | ToF  |  1 | 
| 6 | true or false question 6       | ToF  |  1 | 
| 7 | true or false question 7       | ToF  |  1 | 
| 8 | true or false question 8       | ToF  |  1 | 
| 9 | true or false question 9       | ToF  |  1 | 
| 10 | true or false question 10       | ToF  |  1 | 
| 11 | true or false question 11       | ToF  |  1 | 
| 12 | true or false question 12       | ToF  |  1 | 
| 13 | multi choice question 1       | MC  |  1 | 
| 14 | multi choice question 2       | MC  |  1 | 
| 15 | multi choice question 3       | MC  |  1 | 
| 16 | multi choice question 4       | MC  |  1 | 
| 17 | multi choice question 5       | MC  |  1 | 
| 18 | multi choice question 6       | MC  |  1 | 
| 19 | multi choice question 7       | MC  |  1 | 
| 20 | multi choice question 8       | MC  |  1 | 
| 21 | complete question 1        | complete |  1 | 
| 22 | complete question 2        | complete |  1 | 
| 23 | complete question 3        | complete |  1 | 
| 24 | complete question 4        | complete |  1 | 
| 25 | complete question 5        | complete |  1 | 
| 26 | complete question 6        | complete |  1 | 
| 27 | complete question 7        | complete |  1 | 
+-----+----------------------------------------------------+----------+--------+ 

はその

SELECT * FROM question WHERE type = 'ToF' ORDER BY rand() LIMIT 10 
SELECT * FROM question WHERE type = 'MC' ORDER BY rand() LIMIT 5 
SELECT * FROM question WHERE type = 'complete' ORDER BY rand() LIMIT 2 

は、私が唯一のクエリでそれを行うことができますように、すべてのタイプのためのクエリを記述するのですか?

すべての結果をタイプ別にソートして、それからPHPが望むランダムな結果を得るのは良いですか?

答えて

2

これをすべて1回のクエリで実行できます。 。 。最終的なランダム化さえも:

(SELECT * FROM question WHERE type = 'ToF' ORDER BY rand() LIMIT 10 
) UNION ALL 
(SELECT * FROM question WHERE type = 'MC' ORDER BY rand() LIMIT 5 
) UNION ALL 
(SELECT * FROM question WHERE type = 'complete' ORDER BY rand() LIMIT 2 
) 
ORDER BY rand(); 

これは妥当なアプローチです。事前に知られている種類のほんの一例です。

+0

タイプは静的なので、私が欲しい答えはあります:) – robert

関連する問題