0

以下に、試験の問題ごとの正解を表示するクエリがあります。

<?

        $query = "SELECT q.SessionId, q.QuestionId an.Answer
        FROM Session s
        INNER JOIN Question q ON s.SessionId = q.SessionId
        JOIN Answer an ON q.QuestionId = an.QuestionId
        AND an.SessionId = q.SessionId
        WHERE s.SessionName = "XULWQ"
        ORDER BY q.QuestionId, an.Answer
       ";

       // prepare query
       $stmt=$mysqli->prepare($query);
       // You only need to call bind_param once
       $stmt->bind_param("s", $assessment);
       // execute query
       $stmt->execute(); 


           // This will hold the search results
        $searchQuestionId = array();
        $searchAnswer = array();

        // Fetch the results into an array

       // get result and assign variables (prefix with db)
       $stmt->bind_result($dbSessionId, $dbQuestionId, $dbAnswer);
          while ($stmt->fetch()) {

            $searchQuestionId[] = $dbQuestionId;
            $searchAnswer[] = $dbAnswer;

          } 

    ?>  

以下は、結果がクエリからの出力です。

SessionId  QuestionId  Answer
137        1           B
137        1           D
137        1           F
137        2           A
137        2           C

以下のコードを使用して、上記のデータを php/html テーブルに保存しました。

<table border='1' id='markstbl'>
<thead>
<tr>
<th class='questionth'>Question No.</th>
<th class='answerth'>Answer</th>
</tr>
</thead>
<tbody>
<?php
$row_span = array_count_values($searchQuestionId);
$prev_ques = '';
foreach($searchQuestionId as $key=>$questionId){

?>

<tr class="questiontd">
    <?php
    if($questionId != $prev_ques){
    ?>
    <td class="questionnumtd q<?php echo$questionId?>_qnum" name="numQuestion" rowspan="<?php echo$row_span[$questionId]?>">
    <?php echo$questionId?> 
    </td>
    <?php
    }
    ?>
<td class="answertd" name="answers[]"><?php echo$searchAnswer[$key]?><input type='hidden' id='hidanswerid' name='answersId[]' value='<?php echo$searchAnswerId[$key]?>'></td>
</tr>
<?php
$prev_ques = $questionId;
}
?>
</tbody>
</table>

html/php テーブルの出力:

ここに画像の説明を入力

ですから、その試験の問題ごとの正解を含む表を出力したことがわかります。偉大な。しかし、今は似たような別のページを作成したいのですが、今回は質問ごとに正解を表示することを除いて、質問ごとに不正解を表示したいと考えています。

最善の方法はわかりませんが、私の計画では、最初に各質問の option_type を取得することをお勧めします (オプション タイプは、回答を選択するオプションの数です)。

クエリ:

 $query="SELECT q.SessionId, q.QuestionId, o.OptionId
    FROM SESSION s
    INNER JOIN Question q ON s.SessionId = q.SessionId
    JOIN Option_Table o ON q.OptionId = o.OptionId
    WHERE s.SessionName = "XULWQ"
    ORDER BY q.QuestionId";

結果:

SessionId   QuestionId OptionId
137         1              5
137         2              2

次に、php で case ステートメントを使用して、各ケースの文字を表示します (これをコーディングするには助けが必要です)。

例えば

case 1, OptionId = 1, letters = A B C
case 2, OptionId = 2, letters = A B C D
case 3, OptionId = 3, letters = A B C D E

... //continue going down

case 26, OptionId = 26, letters = A B C D E ... Z
case 27, OptionId = 27, letters = True False (Options True or False)
case 28, OptionId = 28, letters = Yes or No (Options Yes or No)

次に、いくつかの方法で文字から正しい答えを削除します(おそらくクエリを使用しますが、よくわかりません)。html/phpテーブルには、テーブル内の正しい答えではなく、すべての間違った答えが含まれます

だから私の質問は、html/php テーブルに正しい答えではなく間違った答えを表示するためにどのようにコーディングできますか?

上記の例の html/php テーブルの出力は、次のようになります。

ここに画像の説明を入力

コメント: 印刷中に質問の答えを交換できます。

4

1 に答える 1

1

オプションを配列に格納する

$option[1]= array(A,B,C);  
$option[2]= array(A,B,C,D);  
$option[3]= array(A,B,C,D,E);  
.  
.  
.  
.  
$option[27]= array(True,False);  

u と同じようにデータベースから option_type を取得します。

クエリ:

$query="SELECT q.SessionId, q.QuestionId, o.OptionId
FROM SESSION s
INNER JOIN Question q ON s.SessionId = q.SessionId
JOIN Option_Table o ON q.OptionId = o.OptionId
WHERE s.SessionName = "XULWQ"
ORDER BY q.QuestionId";

結果:

SessionId   QuestionId OptionId
137         1              5
137         2              2

foreach 質問 ID

$incorrect_ans[QuestionId]=array_diff($option[OptionId],$correct_ans[QuestionId]); 
于 2013-01-03T07:21:36.983 に答える