我有两个表:
问题表,其中包含:
然后我有另一个表叫做
UserAnswerQuestion包含:
通过question_id
问题是,每次用户回答问题时,我都会在db中创建一行:
question_id user_id已经回答了,然后我检查答案是否正确,如果正确,我将通过传递为True,否则将通过传递为false。
好吧,从现在开始就可以了,我无法获得的是创建一个方法,该方法返回给我的nextQuestion未回答,但我无法正确执行此方法。
我想要的是一个查询,该查询首先返回用户尚未回答的所有问题,然后另一个查询仅返回用户尚未回答的问题。
注意:添加了此显示的属性是因为我想首先遍历其他问题,而不是显示用户最近失败的问题。
问题是否清楚?
我尝试获取问题List<UserAnswerQuestion> findAllByUserEmailAndPassedFalseAndShownFalse(String email);
,但是它不起作用,因为使用此表,我可以知道用户每次尝试的每一个答案,例如,如果我有一个包含4个答案的问题和1个正确的表,该表可以包含4个具有相同question_question_id的行,因为用户可能已失败3次,然后在第四次它正确回答了。
我已经有了用户可以使用此方法回答的问题:
public List<Question> getAllQuestionsThatUserCanAnswer(String email, Long topic){
List<Question> mList = this.questionRepository.findAllByTopicParentId(topic);
if(mList==null) return null;
List<UserAnswerQuestion> userAnswerQuestionList = this.userAnswerQuestionRepository.findAllByUserEmail(email);
for (UserAnswerQuestion userAnswerQuestion : userAnswerQuestionList) {
if(mList.contains(userAnswerQuestion.getQuestion())){
if(userAnswerQuestion.getPassed()){
mList.remove(userAnswerQuestion.getQuestion());
}
}
}
return mList;
}
现在,我正在尝试执行此方法的getNext,但我不知道如何对其进行迭代。
答案 0 :(得分:0)
着重解决问题的SQL查询
select * from Question q
left join Answer a on q.id = a.question_id
where a.id is null OR (a.passed != 'true' AND a.user_id = 1)
order by a.passed
检查刮擦here