From 9c4045256288800a6d47b04f7c91d9f44192f4cf Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Thu, 5 Jan 2023 18:25:15 +0100 Subject: [PATCH] fas lv list: improved speed of query getting the lv by relocating studienplan exists check --- include/lehrstunde.class.php | 80 ++++++++++++++++++------------------ 1 file changed, 39 insertions(+), 41 deletions(-) diff --git a/include/lehrstunde.class.php b/include/lehrstunde.class.php index e87cdd45a..19c1f605f 100644 --- a/include/lehrstunde.class.php +++ b/include/lehrstunde.class.php @@ -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;