2

データベース内の対応するポイントを含む回答キーがあります。たとえば、

number  answer   points
  1       A         2
  2       A         3
  3       B         2
  4       B         3

さて、生徒の答えを入力して確認すると、

number  answer
   1      A
   2      A
   3      C
   4      D

5/10 の学生のスコアをシステムに返してもらいたいです。

私の問題は、回答キーと学生の回答が一致するこれらのポイントの合計を取得して取得する方法がわからないことです。これは私がこれまでに試したことです。

for ($i=1; $i<=$num; $i++) {            
$answer = $_POST['answer'][($i+1)-1]; //this is the student answer
$result = mysql_query("SELECT * FROM paper WHERE sy='$sy' and sem='$sem' and test_name='$test_name' and id='$i' and subject='$subject'");
$qry = mysql_fetch_array($result);
$ans = $qry['answer']; //this is the answer key

if ($answer == $ans){
$resultA = mysql_query("SELECT SUM(points) FROM paper WHERE sy='$sy' and sem='$sem' and test_name='$test_name' and id='$i' and answer='$answer' and subject='$subject'");
$qryA = mysql_fetch_array($resultA);
$score = $qry['SUM(points)'];
4

5 に答える 5

1

スキーマには学生 ID が含まれていないため、考慮から除外しました。

select sum(points) as Score
from answerkey k
inner join answers a on k.number = a.number
where k.answer = a.answer

SQL フィドルの例

学生証の場合は、次のGROUP BYようにします。

select a.student_id, sum(points) as Score
from answerkey k
left outer join answers a on k.number = a.number
where k.answer = a.answer
group by a.student_id
于 2012-10-17T20:09:42.513 に答える
0

SQLクエリはそれを行うことができます。

SELECT SUM(k.points) AS TOTAL FROM k.key,s.answers WHERE s.answer = k.answer;

ここで、k.keyは回答キーであり、s.answersはスチューデントのテストです。ロジックを追加して、1つに制限することができます。

于 2012-10-17T20:13:30.587 に答える
0

ついに手に入れました![($i+1)-1]に変更したばかり[$i-1]です。

于 2012-10-17T22:47:19.253 に答える
0

最初に何を試みたかを実際に示し、問題を説明する必要があります...しかし、質問に抵抗できませんでした:

SELECT
    SUM(k.Points) As Score 
FROM Answers a 
JOIN AnswerScoreKey k 
ON k.Number = a.Number AND k.Answer = a.Answer
于 2012-10-17T20:11:05.017 に答える
0
WITH
    test_answer (number, answer, points) AS (VALUES
        (1, 'A', 2),
        (2, 'A', 3),
        (3, 'B', 2),
        (4, 'B', 3)),

    student_answer (number, answer) AS (VALUES
        (1, 'A'),
        (2, 'A'),
        (3, 'C'),
        (4, 'D'))

SELECT
    SUM(ta.points) AS score,
    (SELECT SUM(points) FROM test_answer) AS total_possible_score

FROM student_answer sa

INNER JOIN test_answer ta
    ON sa.number = ta.number
   AND sa.answer = ta.answer;
于 2012-10-17T20:13:21.920 に答える