一、问题
查询用户所有的错题数目到前端展示,要求展示的时候要有错题的编号,从1开始递增。如果删除了第5题,则将后面的题编号均向前挪。
二、分析
错题是在用户每次做题过程中插入到错题表中的,或者将题目推送表中“错题标识字段”置1,我们没有必要在表中维护一个编号位,因为该编号位除了展示并无其他用途,如果在表中维护的话肯定会造成很多问题。
使用with as将查询的信息内容查询出并暂存,在后面的查询中会多次用到。
参考了一些文章,说with as可以将其下标明的信息进行暂存,然后在该sql中的其他位置作为结果集进行引用,这样只进行一次查询。
with b as( SELECT ( SELECT D .CONTENT_HTML FROM MIC_PAPER_PROBLEMS D WHERE D .tm_id = pm.tm_id ) questionTitle, ( SELECT P .ANSWER_HTML FROM MIC_PAPER_PROBLEMS P WHERE P .TM_ID = pm.tm_id ) rightAns, pm. ID pushId, PM.tm_id questionId, PM.USER_ANSWER yourAnswer FROM MIC_TD_EXERCISE_PUSH_PROBLEM pm, MIC_TD_EXERCISE_USER_PUSH ph WHERE pm.push_id = ph. ID AND ph.USER_ID = ? AND ph.SUBJECT_ID = ? and PM.IS_CORRECT = 2 order by PH.PUSH_TIME,PM.CREATE_TIME ) select rownum seq, b.* from b where b.pushId in (select min(b.pushId) from b group by b.QUESTIONID)
这样在oracle将as中的内容查询出来之后,命名为b,然后执行最下面的select查询,其中where条件中的无关子查询是为了保证用户对同一道题的错题只显示一个(比如,题目a,用户答了两次,都答错了,题目表中会记录两条数据,此处只将该题目展示一次即可)。