一、問題
查詢用戶所有的錯題數目到前端展示,要求展示的時候要有錯題的編號,從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,用戶答了兩次,都答錯了,題目表中會記錄兩條數據,此處只將該題目展示一次即可)。