2011-10-24 20 views
4

質問のテーブルがそうであるように設定されています。複数の行セットを1つのSQLクエリで選択する

id |質問|答え| |シラバス|難易度

難易度が高い場合は、個別のシラバスごとにランダムに5つの質問を選択するSQL文を作成します。

4つのシラバスがある場合、20の質問があります。

私はこのような何かを考えていた...

SELECT 
    * 
FROM 
    questions 
WHERE 
    difficulty='easy' 
AND 
    syllabus 
IN 
(
    SELECT DISTINCT 
     syllabus 
    FROM 
     questions 
    WHERE 
     difficulty='easy' 
) 
LIMIT 
(5* 
    (
    SELECT 
     COUNT(DISTINCT syllabus) 
    FROM 
     questions 
    WHERE 
     difficulty='easy' 
    ) 

しかし、これは明確なシラバス任意のシラバスからの質問の唯一正しい数のそれぞれから5を返しません。

+1

は、[最大-N-あたりグループ]タグを追加しました。右側の** Related **ヘッダーの下にある同様の質問を参照してください。 –

+0

シラバスと別のテーブルを持っていれば、より良いデータモデルになります –

+0

質問/シラバスのIDはありますか?シラバスとID列ですか? – r0ast3d

答えて

1

この仕事だろうが、本当に遅い次のようになります。

SELECT * FROM questions WHERE difficulty='easy' ORDER BY RAND() LIMIT 5; 

より良い方法は、最初の5 IDのを選択し、それらのID年代に対応する行を取得することです。 ID自体を選択するには、WHERE ID> RAND(0、MAX(ID))を使用できますが、ギャップがあるとデータが歪んでしまいます。

より良い代替手段がここで説明されているが、より多くの努力を必要とする:Simple Random Samples from a Sql database

関連する問題