1

クイズの結果を自動保存するクライアント向けのクイズを作成していますが、問題が発生しました。特定のクイズでユーザーが回答していないすべての質問を選択しようとしています。回答された各質問の結果をテーブルに保存しますRESULTSが、複数のユーザーがテーブルに結果を表示すると、ステートメントが台無しになりRESULTSます。誰かが私のコードを見てアドバイスをくれれば、非常に感謝しています。前もって感謝します!

これらのテーブルとステートメントに基づいて、次の質問をロードする必要がありますがque_id = 3use_id = 1私が直面している問題は、それが返されることでque_id = 1ありque_id = 3、ユーザーによって回答されたため、use_id = 2もう一度use_id 3感謝します!

質問表

que_id qui_id que_question que_ans_id
1      1      lorem 1?     1
2      1      lorem 2?     6
3      1      lorem 3?     12

結果表

res_id res_use_id res_qui_id res_que_id res_ans_id
1      1          1          1          2
2      1          1          2          6
3      2          1          3          10
4      3          1          1          1

PHP

$statement_question = $db->prepare("SELECT * FROM roa_quiz
                                    LEFT JOIN roa_questions ON qui_id = que_qui_id
                                    LEFT JOIN roa_results ON que_id = res_que_id
                                    WHERE qui_id = :qui_id AND res_use_id != :use_id");

$statement_question->setFetchMode(PDO::FETCH_ASSOC); 

$statement_question->execute(array(':qui_id' => 1, ':use_id' => 1));

$question = $statement_question->fetch();
4

2 に答える 2

2

一致しない行を取得しようとしています。アイデアは、left outer join一致する行を取得するために使用することです。. . 次に、一致がない場所を確認します。これには 2 つのことが必要です: (1) 条件をon句に移動すること、(2) 句に一致がないかどうかをチェックするwhereこと:

SELECT *
FROM roa_quiz LEFT JOIN
     roa_questions
     ON qui_id = que_qui_id LEFT JOIN
     roa_results
     ON que_id = res_que_id and res_use_id = :use_id
where qui_id = :qui_id AND results.res_que_id is null
于 2013-06-29T23:31:13.473 に答える
0

私はSQLで行きます:

SELECT * FROM roa_quiz
JOIN roa_questions ON qui_id = que_qui_id
LEFT JOIN roa_results ON que_id = res_que_id AND res_use_id = :use_id
WHERE qui_id = :qui_id
AND res_id IS NULL

これにより、ユーザーのクイズに対する未回答の質問のリストが表示されます。SQL 結合に関する便利な図については、こちらをご覧ください。この場合、除外を伴う左外部結合が必要です。

于 2013-06-29T23:31:19.943 に答える