我在php / mysql中创建了一个学生分配系统。这里的表结构。
Student ------StudentAssignment -------Assignment -----attempt
StudentAssignment - stuID, assID, attID
attempts - attID, marks, assDate
学生可以为一项作业做3次尝试。 我使用以下SQL语句来获取带有attDate的MAX标记。
SELECT a.title, MAX(att.marks), a.totalmarks, att.attDate
FROM attempts att, studentassignment sa, assignment a
WHERE sa.attID=att.attID AND sa.assID=a.ass_ID AND sa.assID=:assID AND sa.stuID=:stuID
但它返回带有错误attDate的Max Mark。返回的attDate是上面sql语句的第一行日期。
答案 0 :(得分:2)
您的查询存在许多问题:
FROM
子句中使用逗号。始终使用明确的JOIN
语法。GROUP BY
。出于您的目的,您可以使用ORDER BY
和LIMIT
,而不是MAX()
:
SELECT a.title, att.marks, a.totalmarks, att.attDate
FROM attempts att JOIN
studentassignment sa
ON sa.attID=att.attID JOIN
assignment a
ON sa.assID=a.ass_ID
WHERE sa.assID = :assID AND sa.stuID = :stuID
ORDER BY att.marks DESC
LIMIT 1;
请记住,MAX()
是一个只返回列最大值的函数。它对查询返回的其他值没有影响。