Mysql 获取最新测试结果

Mysql 获取最新测试结果,mysql,Mysql,我有一个包含3个表的数据库 第一个表包含具有fldID、fldName、fldPIN等字段的学生 第二个表包含学生必须回答的问题列表,字段为studentID和questionID 第三个表包含学生每次回答问题的一行,并包含studentID、questionID、response和score字段。每个问题可能有多个答案 我想要一个查询,让我可以得到一个学生的名字(通过他们的PIN)和一个他们需要回答的问题列表,以及每个问题的最新分数。未回答的问题得分为零 我不知道该怎么做这个连接 非常感谢你的

我有一个包含3个表的数据库

第一个表包含具有fldID、fldName、fldPIN等字段的学生

第二个表包含学生必须回答的问题列表,字段为studentID和questionID

第三个表包含学生每次回答问题的一行,并包含studentID、questionID、response和score字段。每个问题可能有多个答案

我想要一个查询,让我可以得到一个学生的名字(通过他们的PIN)和一个他们需要回答的问题列表,以及每个问题的最新分数。未回答的问题得分为零

我不知道该怎么做这个连接

非常感谢你的帮助

戴夫

从那时起,我就提出了这个sql。你能看一看,让我知道这是有效的还是真的很糟糕!!我很难理解你的帖子,所以我很难想出这个

SELECT
`tbldelegate`.`fldFirstName`,
`tbldelegate`.`fldSurname`,
`tbldelegatequestions`.`fldQuestionID`,
`latestScores`.`fldScore`
FROM
`tbldelegate`
Left Join `tbldelegatequestions` ON `tbldelegatequestions`.`fldDelegateID` = `tbldelegate`.`fldID`
Left Join (SELECT *
FROM
(SELECT  max(fldID) as maxID
FROM tblscoredata 
GROUP BY 
`tblscoredata`.`fldDelegateID`,
`tblscoredata`.`fldSection`,
`tblscoredata`.`fldQuestion`
) AS x INNER JOIN `tblscoredata` AS f ON f.fldID = x.maxID) AS `latestScores` ON `latestScores`.`fldQuestion` = `tbldelegatequestions`.`fldQuestionID`
WHERE
`tbldelegate`.`fldPIN` =  '11'

我正在猜测一些表的名称,但是像这样的东西应该可以做到这一点

SELECT s.fldName, sq.questionId, r.score 
FROM students s
INNER JOIN studentQuestions sq ON s.fldID = sq.studentID 
LEFT JOIN questionResponses r ON sq.questionID = r.questionID AND sq.studentID = r.studentId 
WHERE s.fldPIN = 12345;
尝试此操作以获取学生必须回答的每个问题的最新或未回答的结果(这基于使用自动增量id和具有更高id值的较新记录)

选择s.fldName、sq.questionID、r.score
来自学生的
s.id上的内部连接学生问题sq=sq.studentID
左连接sq.questionId=r.questionId和sq.studentID=r.studentID上的问题回答r
sq.questionID=r2.questionID和sq.studentID=r2.studentID和r.id
Gordon的答案非常好。然而,由于Dave在与MAX抗争,我忍不住发布了一个使用它的变体。 我的猜测是,戈顿的答案有更好的表现,他的答案可能是我的两个选择

SELECT s.fldName, sq.questionID, r.score 
FROM students s
INNER JOIN studentQuestions sq ON s.fldID = sq.studentID 
LEFT JOIN questionResponses r ON sq.questionId = r.questionID AND sq.studentID = r.studentId
WHERE r.id = (SELECT MAX(id) FROM questionResponses r2 where r2.id = r.id)
AND s.fldPIN = 12345

谢谢,但这也会列出对一个问题的所有回答吗?我只想知道一个问题的最新答案。我将如何修改此内容?回复表中是否有其他字段?我们需要每个帖子都有一个唯一的ID,或者一个时间戳,这样我们就可以显示最新的响应。我已经为你添加了一个推测性的解决方案,如果你有一个ID字段可用。谢谢你。有一个日期字段和一个自动递增id字段。我试图在日期字段上使用max功能来做一些事情,但结果却不顺利@戴夫:我用MAX添加了一个答案(因为评论中没有格式)。你如何确定哪一个是最后一个?第三个表中是否有时间戳?是的,第三个表中有时间戳和自动递增id列
SELECT s.fldName, sq.questionID, r.score 
FROM students s
INNER JOIN studentQuestions sq ON s.fldID = sq.studentID 
LEFT JOIN questionResponses r ON sq.questionId = r.questionID AND sq.studentID = r.studentId
WHERE r.id = (SELECT MAX(id) FROM questionResponses r2 where r2.id = r.id)
AND s.fldPIN = 12345