Skip to content
Snippets Groups Projects
Commit f42f6878 authored by Jan-Hendrik Willms's avatar Jan-Hendrik Willms
Browse files

use correct join type to avoid reading way too many courses, fixes #4518

Closes #4518

Merge request studip/studip!3319
parent 5029f8e0
No related branches found
No related tags found
No related merge requests found
...@@ -135,29 +135,24 @@ class ExternPagePersonDetails extends ExternPage ...@@ -135,29 +135,24 @@ class ExternPagePersonDetails extends ExternPage
{ {
$grouped_courses = []; $grouped_courses = [];
$semesters = $this->getSemesters(); $semesters = $this->getSemesters();
$query = " $query = "SELECT IFNULL(`semester_courses`.`semester_id`, '-1') AS `group_id`,
SELECT `seminare`.*
IFNULL(`semester_courses`.`semester_id`, '-1') AS `group_id`, FROM `seminare`
`seminare`.* LEFT JOIN `semester_courses`
FROM
`seminare`
LEFT JOIN `semester_courses`
ON `semester_courses`.`course_id` = `seminare`.`Seminar_id` ON `semester_courses`.`course_id` = `seminare`.`Seminar_id`
LEFT JOIN `seminar_user` USING(`seminar_id`) JOIN `seminar_user` USING(`seminar_id`)
LEFT JOIN `sem_types` JOIN `sem_types` ON `sem_types`.`id` = `seminare`.`status`
ON `sem_types`.`id` = `seminare`.`status` WHERE `seminare`.`visible` = 1
WHERE `seminare`.`visible` = 1 AND (`semester_courses`.`semester_id` IN (:semester_ids) OR ISNULL(`semester_id`))
AND `semester_courses`.`semester_id` IN (:semester_ids) OR ISNULL(`semester_id`) AND `seminar_user`.`user_id` = :user_id
AND `seminar_user`.`user_id` = :user_id AND `seminar_user`.`status` = 'dozent'
AND `seminar_user`.`status` = 'dozent' AND `sem_types`.`class` IN (:semclasses)";
AND `sem_types`.`class` IN (:semclasses)";
$grouped_results = DBManager::get()->fetchGrouped($query, [
$grouped_results = DBManager::get()->fetchGrouped($query, 'semester_ids' => $semesters,
[ 'semclasses' => (array) $this->semclass,
'semester_ids' => $semesters, 'user_id' => $user->id
'semclasses' => (array) $this->semclass, ]);
'user_id' => $user->id
]);
// handle unlimited courses // handle unlimited courses
if (isset($grouped_results['-1'])) { if (isset($grouped_results['-1'])) {
...@@ -171,9 +166,9 @@ class ExternPagePersonDetails extends ExternPage ...@@ -171,9 +166,9 @@ class ExternPagePersonDetails extends ExternPage
unset($grouped_results['-1']); unset($grouped_results['-1']);
} }
foreach ($grouped_results as $group_id => $group_result) { foreach ($grouped_results as $group_id => $group_result) {
$grouped_courses[$group_id] = $grouped_courses[$group_id] = SimpleORMapCollection::createFromArray(
SimpleORMapCollection::createFromArray( Course::findMany($group_result)
Course::findMany($group_result)); );
} }
return $grouped_courses; return $grouped_courses;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment