Skip to content
Snippets Groups Projects
Commit f797b9f6 authored by PavelBegunkov's avatar PavelBegunkov
Browse files

Fix getRatesForGroup(ByStage) sp

parent ecc198bd
Branches
Tags
No related merge requests found
...@@ -1003,18 +1003,18 @@ BEGIN ...@@ -1003,18 +1003,18 @@ BEGIN
SELECT students_groups.StudentID SELECT students_groups.StudentID
FROM `students_groups` FROM `students_groups`
LEFT JOIN `disciplines_students` ON disciplines_students.DisciplineID = pDisciplineID AND LEFT JOIN `disciplines_students` ON disciplines_students.DisciplineID = pDisciplineID AND
disciplines_students.StudentID = students.ID disciplines_students.StudentID = students_groups.StudentID
WHERE students_groups.StudentID = students.ID AND WHERE students_groups.SemesterID = vSemesterID AND
students_groups.SemesterID = vSemesterID AND students_groups.State <= 'outlet' AND # actual students
students_groups.State <= 'outlet' AND students_groups.GroupID = pGroupID AND
CASE WHEN !vInGeneralGroup THEN CASE WHEN vInGeneralGroup THEN
students_groups.GroupID = pGroupID AND NOT disciplines_students.Type <=> 'detach' # not detached
disciplines_students.ID IS NOT NULL
ELSE ELSE
disciplines_students.ID IS NULL disciplines_students.Type <=> 'attach' # is attached
END END
); );
DROP TABLE IF EXISTS vRoadMap
CREATE TEMPORARY TABLE vRoadMap AS ( CREATE TEMPORARY TABLE vRoadMap AS (
SELECT view_roadmap.SubmoduleID, SELECT view_roadmap.SubmoduleID,
view_roadmap.ModuleType AS 'Type' view_roadmap.ModuleType AS 'Type'
...@@ -1037,8 +1037,8 @@ BEGIN ...@@ -1037,8 +1037,8 @@ BEGIN
MAX(IF(vRoadMap.Type = 'exam', rt.Rate, 0)) AS 'RateExam' MAX(IF(vRoadMap.Type = 'exam', rt.Rate, 0)) AS 'RateExam'
FROM tStudents FROM tStudents
CROSS JOIN vRoadMap CROSS JOIN vRoadMap
LEFT JOIN `rating_table` as rt ON rating_table.StudentID = tStudents.StudentID AND LEFT JOIN `rating_table` as rt ON rt.StudentID = tStudents.StudentID AND
rating_table.SubmoduleID = vRoadMap.SubmoduleID rt.SubmoduleID = vRoadMap.SubmoduleID
GROUP BY tStudents.StudentID GROUP BY tStudents.StudentID
) vRates ) vRates
INNER JOIN `students` ON students.ID = vRates.StudentID INNER JOIN `students` ON students.ID = vRates.StudentID
...@@ -1126,6 +1126,7 @@ CREATE PROCEDURE `GetRatesForGroupByStage` ( ...@@ -1126,6 +1126,7 @@ CREATE PROCEDURE `GetRatesForGroupByStage` (
) NO SQL ) NO SQL
BEGIN BEGIN
DECLARE vSemesterID, vGroupID INT DEFAULT -1; DECLARE vSemesterID, vGroupID INT DEFAULT -1;
DECLARE vInGeneralGroup BOOL DEFAULT FALSE;
SET vSemesterID = GetDisciplineProperty(pDisciplineID, 'semester'); SET vSemesterID = GetDisciplineProperty(pDisciplineID, 'semester');
DROP TABLE IF EXISTS tStudents; DROP TABLE IF EXISTS tStudents;
CREATE TEMPORARY TABLE tStudents ( CREATE TEMPORARY TABLE tStudents (
...@@ -1133,30 +1134,29 @@ BEGIN ...@@ -1133,30 +1134,29 @@ BEGIN
); );
# check that group attached to discipline. Otherwise vGroupID = -1; # check that group attached to discipline. Otherwise vGroupID = -1;
SELECT disciplines_groups.GroupID INTO vGroupID SET vInGeneralGroup = EXISTS(
FROM `disciplines_groups` SELECT * FROM `disciplines_groups`
WHERE disciplines_groups.GroupID = pGroupID AND WHERE disciplines_groups.DisciplineID = pDisciplineID AND
disciplines_groups.DisciplineID = pDisciplineID disciplines_groups.GroupID = pGroupID
LIMIT 1; LIMIT 1
);
# get all students from group, that take this discipline
IF vGroupID <= 0 THEN # doesn't attached DROP TABLE IF EXISTS tStudents;
INSERT INTO tStudents (`StudentID`) CREATE TEMPORARY TABLE tStudents AS (
SELECT disciplines_students.StudentID SELECT students_groups.StudentID
FROM `disciplines_students` FROM `students_groups`
WHERE disciplines_students.DisciplineID = pDisciplineID AND LEFT JOIN `disciplines_students` ON disciplines_students.DisciplineID = pDisciplineID AND
disciplines_students.Type = 'attach'; disciplines_students.StudentID = students_groups.StudentID
ELSE # attached group WHERE students_groups.SemesterID = vSemesterID AND
INSERT INTO tStudents (`StudentID`) students_groups.State <= 'outlet' AND # actual students
SELECT students_groups.StudentID students_groups.GroupID = pGroupID AND
FROM `students_groups` CASE WHEN vInGeneralGroup THEN
LEFT JOIN `disciplines_students` ON disciplines_students.StudentID = students_groups.StudentID AND NOT disciplines_students.Type <=> 'detach' # not detached
disciplines_students.DisciplineID = pDisciplineID ELSE
WHERE students_groups.GroupID = vGroupID AND disciplines_students.Type <=> 'attach' # is attached
students_groups.SemesterID = vSemesterID AND END
students_groups.State <= 'outlet' AND );
NOT disciplines_students.Type <=> 'detach'; # exclude detached students
END IF;
SELECT tRes.*, SELECT tRes.*,
students.LastName, students.LastName,
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment