Index: lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/dao/SurveyUserDAO.java =================================================================== diff -u -rb7ba7cccd2f8027169900a05b8799d3287429c4e -r42358e1c2782a06507ed19dd6c3ec87ced01d8ac --- lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/dao/SurveyUserDAO.java (.../SurveyUserDAO.java) (revision b7ba7cccd2f8027169900a05b8799d3287429c4e) +++ lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/dao/SurveyUserDAO.java (.../SurveyUserDAO.java) (revision 42358e1c2782a06507ed19dd6c3ec87ced01d8ac) @@ -40,4 +40,6 @@ List getUsersForTablesorter(final Long sessionId, final Long questionId, int page, int size, int sorting, String searchString); int getCountUsersBySession(final Long sessionId, String searchString); + + public List getStatisticsBySession(final Long contentId); } Index: lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/dao/hibernate/SurveyUserDAOHibernate.java =================================================================== diff -u -rb7ba7cccd2f8027169900a05b8799d3287429c4e -r42358e1c2782a06507ed19dd6c3ec87ced01d8ac --- lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/dao/hibernate/SurveyUserDAOHibernate.java (.../SurveyUserDAOHibernate.java) (revision b7ba7cccd2f8027169900a05b8799d3287429c4e) +++ lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/dao/hibernate/SurveyUserDAOHibernate.java (.../SurveyUserDAOHibernate.java) (revision 42358e1c2782a06507ed19dd6c3ec87ced01d8ac) @@ -31,6 +31,7 @@ import org.hibernate.SQLQuery; import org.lamsfoundation.lams.tool.survey.SurveyConstants; import org.lamsfoundation.lams.tool.survey.dao.SurveyUserDAO; +import org.lamsfoundation.lams.tool.survey.model.SurveySession; import org.lamsfoundation.lams.tool.survey.model.SurveyUser; public class SurveyUserDAOHibernate extends BaseDAOHibernate implements SurveyUserDAO { @@ -141,5 +142,21 @@ } return ((Number) list.get(0)).intValue(); } + + private static final String GET_STATISTICS = "SELECT session.*, COUNT(*) numUsers " + + " FROM tl_lasurv11_session session, tl_lasurv11_survey survey, tl_lasurv11_user user " + + " WHERE survey.content_id = :contentId and session.survey_uid = survey.uid and user.session_uid = session.uid " + + " GROUP BY session.session_id"; + + @SuppressWarnings("unchecked") + /** Returns < [surveySession, numUsers] ... [surveySession, numUsers]> */ + public List getStatisticsBySession(final Long contentId) { + SQLQuery query = getSession().createSQLQuery(GET_STATISTICS); + query.addEntity(SurveySession.class) + .addScalar("numUsers", Hibernate.INTEGER) + .setLong("contentId", contentId); + return query.list(); + } + } Index: lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/service/SurveyServiceImpl.java =================================================================== diff -u -rb7ba7cccd2f8027169900a05b8799d3287429c4e -r42358e1c2782a06507ed19dd6c3ec87ced01d8ac --- lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/service/SurveyServiceImpl.java (.../SurveyServiceImpl.java) (revision b7ba7cccd2f8027169900a05b8799d3287429c4e) +++ lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/service/SurveyServiceImpl.java (.../SurveyServiceImpl.java) (revision 42358e1c2782a06507ed19dd6c3ec87ced01d8ac) @@ -439,16 +439,13 @@ @Override public SortedMap getStatistic(Long contentId) { SortedMap result = new TreeMap(new SurveySessionComparator()); - List sessionList = surveySessionDao.getByContentId(contentId); - if (sessionList == null) { - return result; + + List stats = surveyUserDao.getStatisticsBySession(contentId); + for ( Object[] stat : stats) { + SurveySession session = (SurveySession) stat[0]; + Integer numUsers = (Integer) stat[1]; + result.put(session,numUsers); } - - for (SurveySession session : sessionList) { - List users = getSessionUsers(session.getSessionId()); - result.put(session, users != null ? users.size() : 0); - } - return result; }