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
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 回答
0

SQL查询可以做到这一点..

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

其中:k.key 是您的答案键,s.answers 是您学生的测试。您可以添加其他逻辑以将其限制为一个。

于 2012-10-17T20:13:30.587 回答
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

我终于明白了!我刚改成[($i+1)-1].[$i-1]

于 2012-10-17T22:47:19.253 回答