From d2aef552e6bf24a56042f851da2717384000d859 Mon Sep 17 00:00:00 2001 From: alan <547533434@qq.com> Date: Fri, 26 Dec 2014 14:50:14 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E3=80=8A=E4=BD=9C=E4=B8=9A?= =?UTF-8?q?=E8=AF=84=E5=88=86=E3=80=8B=20Signed-off-by:=20alan=20<54753343?= =?UTF-8?q?4@qq.com>?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/application_controller.rb | 1 + app/controllers/courses_controller.rb | 18 ++--- app/views/courses/_member_list.html.erb | 4 +- data/member_score.sql | 97 +++++++++++++++++++++++ 4 files changed, 106 insertions(+), 14 deletions(-) create mode 100644 data/member_score.sql diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 54346c0cc..35e034603 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -759,6 +759,7 @@ class ApplicationController < ActionController::Base end end + #查找首页相关信息 def find_first_page @first_page = FirstPage.find_by_page_type('project') diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index 2e28c793e..ffdd51762 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -216,7 +216,7 @@ class CoursesController < ApplicationController @results = searchmember_by_name(student_homework_score, q) elsif params[:ingroup] @group = CourseGroup.find(params[:search_group_id]) - @results = @results =searchgroupmember_by_name(student_homework_score, @group, q) + @results =searchgroupmember_by_name(student_homework_score, @group, q) end @result_count = @results.count @@ -881,17 +881,11 @@ class CoursesController < ApplicationController end def student_homework_score - teachers = find_course_teachers(@course) - homework_scores = Member.find_by_sql("SELECT id, user_id,course_id, course_group_id,created_on,IFNULL(SUM(CASE WHEN t_score <> 0 AND t_score IS NOT NULL THEN t_score ELSE s_score END),0) as score - FROM ( - SELECT members.id as id, members.user_id AS user_id, members.course_id AS course_id, members.created_on as created_on,members.course_group_id AS course_group_id, - (SELECT AVG(seems_rateable_rates.stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id IN (#{teachers})) AS t_score, - (SELECT AVG(seems_rateable_rates.stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id NOT IN (#{teachers})) AS s_score - FROM `homework_attaches` , members - WHERE members.course_id = #{@course.id} - AND members.user_id NOT IN (#{teachers}) AND homework_attaches.bid_id IN (SELECT bid_id FROM homework_for_courses WHERE course_id = #{@course.id}) - AND homework_attaches.user_id = members.user_id - ) AS table1 GROUP BY user_id ORDER BY score DESC") + #teachers = find_course_teachers(@course) + sql = ActiveRecord::Base.connection() + + homework_scores = Member.find_by_sql("call member_score(#{@course.id})") + sql.close() homework_scores end #获取课程的老师列表 diff --git a/app/views/courses/_member_list.html.erb b/app/views/courses/_member_list.html.erb index 9b3a0443d..860c86ba4 100644 --- a/app/views/courses/_member_list.html.erb +++ b/app/views/courses/_member_list.html.erb @@ -53,7 +53,7 @@ <% members.each do |member| %>
diff --git a/data/member_score.sql b/data/member_score.sql new file mode 100644 index 000000000..13858ccce --- /dev/null +++ b/data/member_score.sql @@ -0,0 +1,97 @@ + +DELIMITER $$ + +CREATE + /*[DEFINER = { user | CURRENT_USER }]*/ + PROCEDURE `member_score`(IN courseid INT) + /*LANGUAGE SQL + | [NOT] DETERMINISTIC + | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } + | SQL SECURITY { DEFINER | INVOKER } + | COMMENT 'string'*/ + BEGIN + + CREATE TEMPORARY TABLE IF NOT EXISTS course_teachers ( + id INT + + ); + TRUNCATE TABLE course_teachers; + + CREATE TEMPORARY TABLE IF NOT EXISTS mems ( + id INT , + user_id INT, + course_id INT, + created_on DATETIME, + course_group_id INT, + score FLOAT DEFAULT 0 + ); + TRUNCATE TABLE mems; + + CREATE TEMPORARY TABLE IF NOT EXISTS mem_home ( + id INT, + user_id INT, + course_id INT, + created_on DATETIME, + course_group_id INT, + home_id INT, + score FLOAT DEFAULT 0 + ); + TRUNCATE TABLE mem_home; + + CREATE TEMPORARY TABLE IF NOT EXISTS t_scores ( + + home_id INT, + score FLOAT + ); + TRUNCATE TABLE t_scores; + + CREATE TEMPORARY TABLE IF NOT EXISTS s_scores ( + + home_id INT, + score FLOAT + ); + TRUNCATE TABLE s_scores; + + CREATE TEMPORARY TABLE IF NOT EXISTS scores ( + + user_id INT, + score FLOAT + ); + TRUNCATE TABLE scores; + + INSERT INTO course_teachers (SELECT members.user_id FROM members WHERE members.user_id NOT IN (SELECT student_id FROM students_for_courses WHERE course_id = courseid)); + + #查出所有的学生 + + INSERT INTO mems (id, user_id, course_id, created_on, course_group_id) + (SELECT members.id, members.user_id, members.course_id, members.created_on, members.course_group_id + FROM members WHERE course_id = courseid AND members.user_id NOT IN (SELECT id FROM course_teachers)); + + # 查出所有的学生列表及其作业 + INSERT INTO mem_home (id, user_id, course_id, created_on, course_group_id,home_id) + (SELECT members.id, members.user_id, members.course_id, members.created_on, members.course_group_id, homework_attaches.id + FROM members, homework_attaches WHERE course_id = courseid + AND members.user_id = homework_attaches.user_id AND members.user_id NOT IN (SELECT id FROM course_teachers) + AND homework_attaches.bid_id IN (SELECT bid_id FROM homework_for_courses WHERE course_id = courseid )); + + INSERT INTO t_scores (home_id, score) (SELECT rateable_id,AVG(seems_rateable_rates.stars) + FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id IN (SELECT mem_home.home_id FROM mem_home) + AND rater_id IN (SELECT id FROM course_teachers) + GROUP BY rateable_id); + + INSERT INTO s_scores (home_id, score) (SELECT rateable_id,AVG(seems_rateable_rates.stars) + FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id IN (SELECT mem_home.home_id FROM mem_home) + AND rater_id NOT IN (SELECT id FROM course_teachers) + GROUP BY rateable_id) ; + + UPDATE mem_home, t_scores SET mem_home.score = t_scores.score WHERE mem_home.home_id = t_scores.home_id ; + + UPDATE mem_home, s_scores SET mem_home.score = s_scores.score WHERE mem_home.home_id = s_scores.home_id AND mem_home.score = 0; + + INSERT INTO scores (user_id, score) (SELECT user_id, SUM(score) FROM mem_home GROUP BY user_id); + UPDATE mems, scores SET mems.score = scores.score WHERE mems.user_id = scores.user_id; + + SELECT * FROM mems ORDER BY score DESC; + END$$ + +DELIMITER ; \ No newline at end of file