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

optimize performance of query from GlobalSearchCourses::getSQL(), fixes #1561

Closes #1561

Merge request studip/studip!990
parent 00e62584
No related branches found
No related tags found
No related merge requests found
...@@ -47,7 +47,16 @@ class GlobalSearchCourses extends GlobalSearchModule implements GlobalSearchFull ...@@ -47,7 +47,16 @@ class GlobalSearchCourses extends GlobalSearchModule implements GlobalSearchFull
$search = str_replace(' ', '% ', $search); $search = str_replace(' ', '% ', $search);
$query = DBManager::get()->quote("%{$search}%"); $query = DBManager::get()->quote("%{$search}%");
$language = DBManager::get()->quote($_SESSION['_language']); $language_name = 'courses.`Name`';
$language_join = '';
if (I18N::isEnabled() && $_SESSION['_language'] !== I18NString::getDefaultLanguage()) {
$language_name = 'IFNULL(`i18n`.`value`, courses.`Name`)';
$language_join = "LEFT JOIN `i18n`
ON `i18n`.`object_id` = courses.`Seminar_id`
AND `i18n`.`table` = 'seminare'
AND `i18n`.`field` = 'name'
AND `lang` = " . DBManager::get()->quote($_SESSION['_language']);
}
// visibility // visibility
if (!$GLOBALS['perm']->have_perm('admin')) { if (!$GLOBALS['perm']->have_perm('admin')) {
...@@ -87,25 +96,18 @@ class GlobalSearchCourses extends GlobalSearchModule implements GlobalSearchFull ...@@ -87,25 +96,18 @@ class GlobalSearchCourses extends GlobalSearchModule implements GlobalSearchFull
} }
$sql = "SELECT SQL_CALC_FOUND_ROWS courses.`Seminar_id`, courses.`start_time`, $sql = "SELECT SQL_CALC_FOUND_ROWS courses.`Seminar_id`, courses.`start_time`,
IFNULL(`i18n`.`value`, courses.`Name`) AS `Name`, {$language_name} AS `Name`,
courses.`VeranstaltungsNummer`, courses.`status` courses.`VeranstaltungsNummer`, courses.`status`
FROM `seminare` AS courses FROM `seminare` AS courses
LEFT JOIN `i18n` {$language_join}
ON `i18n`.`object_id` = courses.`Seminar_id`
AND `i18n`.`table` = 'seminare'
AND `i18n`.`field` = 'name'
AND `lang` = {$language}
JOIN `sem_types` ON (courses.`status` = `sem_types`.`id`)
JOIN `seminar_user` u ON (u.`Seminar_id` = courses.`Seminar_id` AND u.`status` = 'dozent') JOIN `seminar_user` u ON (u.`Seminar_id` = courses.`Seminar_id` AND u.`status` = 'dozent')
JOIN `auth_user_md5` a ON (a.`user_id` = u.`user_id`) JOIN `auth_user_md5` a ON (a.`user_id` = u.`user_id`)
{$semester_join} {$semester_join}
WHERE {$visibility} WHERE {$visibility}
( (
IFNULL(`i18n`.`value`, courses.`Name`) LIKE {$query} {$language_name} LIKE {$query}
OR courses.`VeranstaltungsNummer` LIKE {$query} OR courses.`VeranstaltungsNummer` LIKE {$query}
OR CONCAT_WS(' ', `sem_types`.`name`, IFNULL(`i18n`.`value`, courses.`Name`), `sem_types`.`name`) LIKE {$query} OR CONCAT(a.`Nachname`, ', ', a.`Vorname`, ' ', a.`Nachname`) LIKE {$query}
OR CONCAT_WS(', ', a.`Nachname`, a.`Vorname`) LIKE {$query}
OR CONCAT_WS(' ', a.`Nachname`, a.`Vorname`, a.`Nachname`) LIKE {$query}
) )
{$seminaruser} {$seminaruser}
{$institute_condition} {$institute_condition}
...@@ -118,7 +120,7 @@ class GlobalSearchCourses extends GlobalSearchModule implements GlobalSearchFull ...@@ -118,7 +120,7 @@ class GlobalSearchCourses extends GlobalSearchModule implements GlobalSearchFull
$sql .= ", courses.`VeranstaltungsNummer`"; $sql .= ", courses.`VeranstaltungsNummer`";
} }
$sql .= ", IFNULL(`i18n`.`value`, courses.`Name`)"; $sql .= ", `Name`";
$sql .= " LIMIT " . $limit; $sql .= " LIMIT " . $limit;
return $sql; return $sql;
......
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