From f797b9f68b76dcac6d533b9e52d859db5c65d7b8 Mon Sep 17 00:00:00 2001 From: PavelBegunkov <asml.silence@gmail.com> Date: Mon, 26 Oct 2015 20:33:12 +0300 Subject: [PATCH] Fix getRatesForGroup(ByStage) sp --- db/stored/procedures.sql | 66 ++++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/db/stored/procedures.sql b/db/stored/procedures.sql index a3cb35e2c..5d0ce7959 100644 --- a/db/stored/procedures.sql +++ b/db/stored/procedures.sql @@ -1003,18 +1003,18 @@ BEGIN SELECT students_groups.StudentID FROM `students_groups` LEFT JOIN `disciplines_students` ON disciplines_students.DisciplineID = pDisciplineID AND - disciplines_students.StudentID = students.ID - WHERE students_groups.StudentID = students.ID AND - students_groups.SemesterID = vSemesterID AND - students_groups.State <= 'outlet' AND - CASE WHEN !vInGeneralGroup THEN - students_groups.GroupID = pGroupID AND - disciplines_students.ID IS NOT NULL + disciplines_students.StudentID = students_groups.StudentID + WHERE students_groups.SemesterID = vSemesterID AND + students_groups.State <= 'outlet' AND # actual students + students_groups.GroupID = pGroupID AND + CASE WHEN vInGeneralGroup THEN + NOT disciplines_students.Type <=> 'detach' # not detached ELSE - disciplines_students.ID IS NULL + disciplines_students.Type <=> 'attach' # is attached END ); + DROP TABLE IF EXISTS vRoadMap CREATE TEMPORARY TABLE vRoadMap AS ( SELECT view_roadmap.SubmoduleID, view_roadmap.ModuleType AS 'Type' @@ -1037,8 +1037,8 @@ BEGIN MAX(IF(vRoadMap.Type = 'exam', rt.Rate, 0)) AS 'RateExam' FROM tStudents CROSS JOIN vRoadMap - LEFT JOIN `rating_table` as rt ON rating_table.StudentID = tStudents.StudentID AND - rating_table.SubmoduleID = vRoadMap.SubmoduleID + LEFT JOIN `rating_table` as rt ON rt.StudentID = tStudents.StudentID AND + rt.SubmoduleID = vRoadMap.SubmoduleID GROUP BY tStudents.StudentID ) vRates INNER JOIN `students` ON students.ID = vRates.StudentID @@ -1126,6 +1126,7 @@ CREATE PROCEDURE `GetRatesForGroupByStage` ( ) NO SQL BEGIN DECLARE vSemesterID, vGroupID INT DEFAULT -1; + DECLARE vInGeneralGroup BOOL DEFAULT FALSE; SET vSemesterID = GetDisciplineProperty(pDisciplineID, 'semester'); DROP TABLE IF EXISTS tStudents; CREATE TEMPORARY TABLE tStudents ( @@ -1133,30 +1134,29 @@ BEGIN ); # check that group attached to discipline. Otherwise vGroupID = -1; - SELECT disciplines_groups.GroupID INTO vGroupID - FROM `disciplines_groups` - WHERE disciplines_groups.GroupID = pGroupID AND - disciplines_groups.DisciplineID = pDisciplineID - LIMIT 1; + SET vInGeneralGroup = EXISTS( + SELECT * FROM `disciplines_groups` + WHERE disciplines_groups.DisciplineID = pDisciplineID AND + disciplines_groups.GroupID = pGroupID + LIMIT 1 + ); - # get all students from group, that take this discipline - IF vGroupID <= 0 THEN # doesn't attached - INSERT INTO tStudents (`StudentID`) - SELECT disciplines_students.StudentID - FROM `disciplines_students` - WHERE disciplines_students.DisciplineID = pDisciplineID AND - disciplines_students.Type = 'attach'; - ELSE # attached group - INSERT INTO tStudents (`StudentID`) - SELECT students_groups.StudentID - FROM `students_groups` - LEFT JOIN `disciplines_students` ON disciplines_students.StudentID = students_groups.StudentID AND - disciplines_students.DisciplineID = pDisciplineID - WHERE students_groups.GroupID = vGroupID AND - students_groups.SemesterID = vSemesterID AND - students_groups.State <= 'outlet' AND - NOT disciplines_students.Type <=> 'detach'; # exclude detached students - END IF; + + DROP TABLE IF EXISTS tStudents; + CREATE TEMPORARY TABLE tStudents AS ( + SELECT students_groups.StudentID + FROM `students_groups` + LEFT JOIN `disciplines_students` ON disciplines_students.DisciplineID = pDisciplineID AND + disciplines_students.StudentID = students_groups.StudentID + WHERE students_groups.SemesterID = vSemesterID AND + students_groups.State <= 'outlet' AND # actual students + students_groups.GroupID = pGroupID AND + CASE WHEN vInGeneralGroup THEN + NOT disciplines_students.Type <=> 'detach' # not detached + ELSE + disciplines_students.Type <=> 'attach' # is attached + END + ); SELECT tRes.*, students.LastName, -- GitLab