0

質問に複数の選択肢があるクイズシステムがあります。

正しい答えと、さらに 4 つの間違った選択肢を示したいと思います。完全に私は 5 つの選択肢を持っている必要があります。

テーブルの選択肢

id | choice | questionid | correct
---+--------+------------+--------
 1 | choice1|          1 |   false
 2 | choice2|          1 |   false
 3 | choice3|          1 |   false
 4 | choice4|          1 |   false
 5 | choice5|          1 |    true
 6 | choice6|          1 |   false
 7 | choice7|          1 |   false
 8 | choice8|          1 |   false

テーブルが拡張される可能性があります...

ここで、4 つの間違った答えと正しい答えを選択して、質問の下にリストします。また、ユーザーごとに、質問の選択肢が異なるはずです。

この結果をテーブルに照会するにはどうすればよいですか? 2 つのクエリを作成して、以下のような配列にバインドしたくありません。

SELECT   * 
FROM     `choices` 
WHERE    questionid = :qid AND correct = true

SELECT   * 
FROM `choices` 
WHERE questionid = :qid AND 
      correct = false AND 
      id IN( 
             SELECT  id 
             FROM    `choices` 
             ORDER BY RAND() 
             LIMIT 4
            )

代わりに、私が推測する1つのステップで実行する必要があります。

4

1 に答える 1

2
SELECT *
FROM `choises`
WHERE questionid = :qid
ORDER BY correct DESC, RAND()
LIMIT 5

correctある種のintであると仮定します。DESCそれ以外の場合は、に変更する必要がある場合がありますASC

ORDER BY RAND()次のように、もう 1 つを使用して 5 つの結果を「シャッフル」できます。

SELECT * FROM (
    SELECT *
    FROM `choises`
    WHERE questionid = :qid
    ORDER BY correct DESC, RAND()
    LIMIT 5
) as t
ORDER BY RAND()
于 2013-11-08T16:09:45.690 に答える