diff --git a/db/StoredProcedures.sql b/db/StoredProcedures.sql index 13e81d0e6f9d5e7ab769cd48c9b86fe629518752..d93d6aad1a4d3ec4879352fa91851ace807bee21 100644 --- a/db/StoredProcedures.sql +++ b/db/StoredProcedures.sql @@ -512,10 +512,9 @@ END // DROP PROCEDURE IF EXISTS GetStudentsByStudyGroups// DROP PROCEDURE IF EXISTS GetStudents// CREATE PROCEDURE `GetStudents` ( - IN `pGroupID` INT, - IN `pSemesterID` INT - ) - NO SQL + IN `pGroupID` INT, + IN `pSemesterID` INT +) NO SQL BEGIN SELECT view_students.StudentID AS 'ID', view_students.LastName, @@ -593,7 +592,7 @@ BEGIN ORDER BY view_students.LastName ASC, view_students.FirstName ASC; END // -# students, that don't included in general groups without attached + # not in general groups, not attached DROP PROCEDURE IF EXISTS SearchStudents// CREATE PROCEDURE `SearchStudents` ( @@ -664,35 +663,50 @@ END // -# in general groups, attached and detached +# in general groups, attached or detached DROP PROCEDURE IF EXISTS GetStudentsForDiscipline// CREATE PROCEDURE `GetStudentsForDiscipline` ( - IN `pDisciplineID` INT - ) - NO SQL + IN `pDisciplineID` INT +) NO SQL BEGIN DECLARE vSemesterID INT DEFAULT -1; SET vSemesterID = GetDisciplineProperty(pDisciplineID, 'semester'); - SELECT view_disciplines_students.StudentID AS 'ID', - view_disciplines_students.LastName, - view_disciplines_students.FirstName, - view_disciplines_students.SecondName, - view_disciplines_students.GradeID, - view_disciplines_students.GradeNum, - view_disciplines_students.Degree, - view_disciplines_students.GroupID, - view_disciplines_students.GroupNum, - view_disciplines_students.AttachType AS 'AttachType' - FROM `view_disciplines_students` - WHERE view_disciplines_students.DisciplineID = pDisciplineID AND - view_disciplines_students.SemesterID = vSemesterID - ORDER BY (view_disciplines_students.AttachType IS NULL OR - view_disciplines_students.AttachType = 'detach') DESC, - view_disciplines_students.GradeID ASC, - view_disciplines_students.GroupNum ASC, - view_disciplines_students.LastName ASC, - view_disciplines_students.FirstName ASC; + SELECT view_students.StudentID AS 'ID', + view_students.LastName, + view_students.FirstName, + view_students.SecondName, + view_students.GradeID, + view_students.GradeNum, + view_students.Degree, + view_students.GroupID, + view_students.GroupNum, + tDiscStudents.Type AS 'AttachType' + FROM ( + SELECT st.StudentID, + COALESCE(st.Type) AS 'Type' + FROM ( + SELECT disciplines_students.StudentID, + disciplines_students.Type + FROM `disciplines_students` + WHERE disciplines_students.DisciplineID = pDisciplineID + UNION + SELECT students_groups.StudentID, + NULL AS 'Type' + FROM `disciplines_groups` + LEFT JOIN `students_groups` ON students_groups.SemesterID = vSemesterID AND + students_groups.GroupID = disciplines_groups.GroupID + WHERE disciplines_groups.DisciplineID = pDisciplineID + ) as st + GROUP BY st.StudentID + ) tDiscStudents + INNER JOIN `view_students` ON view_students.StudentID = tDiscStudents.StudentID AND + view_students.SemesterID = vSemesterID + ORDER BY ( tDiscStudents.Type <=> 'attach' ) ASC, + view_students.GradeID ASC, + view_students.GroupNum ASC, + view_students.LastName ASC, + view_students.FirstName ASC; END // @@ -706,25 +720,42 @@ BEGIN DECLARE vSemesterID INT DEFAULT -1; SET vSemesterID = GetDisciplineProperty(pDisciplineID, 'semester'); - SELECT view_disciplines_students.StudentID AS 'ID', - view_disciplines_students.LastName, - view_disciplines_students.FirstName, - view_disciplines_students.SecondName, - view_disciplines_students.GradeID, - view_disciplines_students.GradeNum, - view_disciplines_students.Degree, - view_disciplines_students.GroupID, - view_disciplines_students.GroupNum, - (view_disciplines_students.AttachType IS NOT NULL) AS 'IsAttached' - FROM `view_disciplines_students` - WHERE view_disciplines_students.SemesterID = vSemesterID AND - view_disciplines_students.DisciplineID = pDisciplineID AND - (view_disciplines_students.AttachType IS NULL OR - view_disciplines_students.AttachType = 'attach') - ORDER BY view_disciplines_students.GradeID ASC, - view_disciplines_students.GroupNum ASC, - view_disciplines_students.LastName ASC, - view_disciplines_students.FirstName ASC; + + SELECT view_students.StudentID AS 'ID', + view_students.LastName, + view_students.FirstName, + view_students.SecondName, + view_students.GradeID, + view_students.GradeNum, + view_students.Degree, + view_students.GroupID, + view_students.GroupNum, + ( tDiscStudents.Type IS NOT NULL ) AS 'IsAttached' + FROM ( + SELECT st.StudentID, + COALESCE(st.Type) AS 'Type' + FROM ( + SELECT disciplines_students.StudentID, + disciplines_students.Type + FROM `disciplines_students` + WHERE disciplines_students.DisciplineID = pDisciplineID + UNION + SELECT students_groups.StudentID, + NULL AS 'Type' + FROM `disciplines_groups` + LEFT JOIN `students_groups` ON students_groups.SemesterID = vSemesterID AND + students_groups.GroupID = disciplines_groups.GroupID + WHERE disciplines_groups.DisciplineID = pDisciplineID + ) as st + GROUP BY st.StudentID + ) tDiscStudents + INNER JOIN `view_students` ON view_students.StudentID = tDiscStudents.StudentID AND + view_students.SemesterID = vSemesterID + WHERE NOT tDiscStudents.Type <=> 'detach' + ORDER BY view_students.GradeID ASC, + view_students.GroupNum ASC, + view_students.LastName ASC, + view_students.FirstName ASC; END //