获取未显示或未回答的问题列表

时间:2019-03-25 16:57:12

标签: sql spring hibernate jpa spring-data-jpa

我有两个表:

问题表,其中包含:

image

然后我有另一个表叫做

UserAnswerQuestion包含:

image

通过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,但我不知道如何对其进行迭代。

1 个答案:

答案 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