fas lv list: improved speed of query getting the lv by relocating studienplan exists check

This commit is contained in:
KarpAlex
2023-01-05 18:25:15 +01:00
parent 6d05df876b
commit 9c40452562
+39 -41
View File
@@ -1123,27 +1123,32 @@ class lehrstunde extends basis_db
-- if student is assigned to lehreinheit through lehreinheitgruppe.
AND (
lehreinheit_id IN (
SELECT tbl_lehreinheit.lehreinheit_id
FROM lehre.tbl_lehreinheitgruppe,
tbl_benutzergruppe,
lehre.tbl_lehreinheit
WHERE tbl_lehreinheitgruppe.gruppe_kurzbz::text = tbl_benutzergruppe.gruppe_kurzbz::text
AND tbl_lehreinheit.lehreinheit_id = tbl_lehreinheitgruppe.lehreinheit_id
AND tbl_lehreinheit.studiensemester_kurzbz::text = tbl_benutzergruppe.studiensemester_kurzbz::text
AND uid=".$this->db_add_param($student_uid)."
AND tbl_lehreinheit.studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz)."
UNION
SELECT tbl_lehreinheit.lehreinheit_id
FROM lehre.tbl_lehreinheitgruppe,
tbl_studentlehrverband,
lehre.tbl_lehreinheit
WHERE
SELECT tbl_lehreinheit.lehreinheit_id
FROM lehre.tbl_lehreinheitgruppe,
tbl_benutzergruppe,
lehre.tbl_lehreinheit,
lehre.tbl_lehrveranstaltung
WHERE tbl_lehreinheitgruppe.gruppe_kurzbz::text = tbl_benutzergruppe.gruppe_kurzbz::text
AND tbl_lehrveranstaltung.lehrveranstaltung_id = tbl_lehreinheit.lehrveranstaltung_id
AND tbl_lehreinheit.lehreinheit_id = tbl_lehreinheitgruppe.lehreinheit_id
AND tbl_lehreinheit.studiensemester_kurzbz::text = tbl_benutzergruppe.studiensemester_kurzbz::text
AND uid=".$this->db_add_param($student_uid)."
AND tbl_lehreinheit.studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz)."
UNION
SELECT tbl_lehreinheit.lehreinheit_id
FROM lehre.tbl_lehreinheitgruppe,
tbl_studentlehrverband,
lehre.tbl_lehreinheit,
lehre.tbl_lehrveranstaltung
WHERE tbl_lehreinheit.lehreinheit_id = tbl_lehreinheitgruppe.lehreinheit_id
AND tbl_lehreinheit.studiensemester_kurzbz = tbl_studentlehrverband.studiensemester_kurzbz
AND tbl_lehrveranstaltung.lehrveranstaltung_id = tbl_lehreinheit.lehrveranstaltung_id
AND tbl_studentlehrverband.studiengang_kz = tbl_lehreinheitgruppe.studiengang_kz
AND tbl_studentlehrverband.semester = tbl_lehreinheitgruppe.semester
AND
(
(
tbl_lehreinheit.lehreinheit_id = tbl_lehreinheitgruppe.lehreinheit_id
AND tbl_lehreinheit.studiensemester_kurzbz = tbl_studentlehrverband.studiensemester_kurzbz
AND tbl_studentlehrverband.studiengang_kz = tbl_lehreinheitgruppe.studiengang_kz
AND tbl_studentlehrverband.semester = tbl_lehreinheitgruppe.semester
AND (
(
btrim(tbl_studentlehrverband.verband::text) = btrim(tbl_lehreinheitgruppe.verband::text)
OR (tbl_lehreinheitgruppe.verband IS NULL OR btrim(tbl_lehreinheitgruppe.verband::text) = '')
AND tbl_lehreinheitgruppe.gruppe_kurzbz IS NULL
@@ -1154,29 +1159,22 @@ class lehrstunde extends basis_db
AND tbl_lehreinheitgruppe.gruppe_kurzbz IS NULL
)
)
AND student_uid=".$this->db_add_param($student_uid)."
AND tbl_lehreinheit.studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz)."
)
OR
-- if student is directly assigned in studienplan
EXISTS
(
WITH stud_lvb AS (
SELECT studiengang_kz, semester, verband, gruppe, studiensemester_kurzbz
FROM public.tbl_studentlehrverband
WHERE student_uid=".$this->db_add_param($student_uid)."
AND studiensemester_kurzbz = ".$this->db_add_param($studiensemester_kurzbz)."
-- add also lehreinheiten directly from Stundenplan
OR EXISTS (
SELECT 1 FROM lehre.tbl_stundenplan
WHERE
lehreinheit_id = tbl_lehreinheit.lehreinheit_id
AND studiengang_kz = tbl_studentlehrverband.studiengang_kz
AND (semester = tbl_studentlehrverband.semester OR semester IS NULL)
AND (verband = tbl_studentlehrverband.verband OR verband IS NULL OR verband ='0' OR verband = '')
AND (gruppe = tbl_studentlehrverband.gruppe OR gruppe IS NULL OR gruppe ='0' OR gruppe = '')
AND gruppe_kurzbz IS NULL
)
SELECT 1 FROM stud_lvb
JOIN lehre.tbl_lehreinheit le ON stud_lvb.studiensemester_kurzbz = le.studiensemester_kurzbz AND le.lehreinheit_id = tbl_lehreinheit.lehreinheit_id
WHERE
studiengang_kz = stpl.studiengang_kz
AND (semester = stpl.semester OR stpl.semester IS NULL)
AND (verband = stpl.verband OR stpl.verband IS NULL OR stpl.verband ='0' OR stpl.verband = '')
AND (gruppe = stpl.gruppe OR stpl.gruppe IS NULL OR stpl.gruppe ='0' OR stpl.gruppe = '')
AND stpl.gruppe_kurzbz IS NULL
)
) ";
AND student_uid=".$this->db_add_param($student_uid)."
AND tbl_lehreinheit.studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz)."
)
)";
}
else
return false;