diff options
| author | Jan-Hendrik Willms <tleilax+studip@gmail.com> | 2022-09-09 07:34:18 +0000 |
|---|---|---|
| committer | Jan-Hendrik Willms <tleilax+studip@gmail.com> | 2022-09-09 07:34:18 +0000 |
| commit | 219f631ee05aea4c3abcc93f624cec510b57435a (patch) | |
| tree | 8028497c1fb21d7f5d7fa256f521960bc12a6be8 /lib/classes/globalsearch/GlobalSearchCourses.php | |
| parent | 00e62584ae9b60c7646290d4481b71f42fce8d81 (diff) | |
optimize performance of query from GlobalSearchCourses::getSQL(), fixes #1561
Closes #1561
Merge request studip/studip!990
Diffstat (limited to 'lib/classes/globalsearch/GlobalSearchCourses.php')
| -rw-r--r-- | lib/classes/globalsearch/GlobalSearchCourses.php | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/lib/classes/globalsearch/GlobalSearchCourses.php b/lib/classes/globalsearch/GlobalSearchCourses.php index b4b9bcc..a490b2e 100644 --- a/lib/classes/globalsearch/GlobalSearchCourses.php +++ b/lib/classes/globalsearch/GlobalSearchCourses.php @@ -47,7 +47,16 @@ class GlobalSearchCourses extends GlobalSearchModule implements GlobalSearchFull $search = str_replace(' ', '% ', $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 if (!$GLOBALS['perm']->have_perm('admin')) { @@ -87,25 +96,18 @@ class GlobalSearchCourses extends GlobalSearchModule implements GlobalSearchFull } $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` FROM `seminare` AS courses - LEFT JOIN `i18n` - 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`) + {$language_join} 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`) {$semester_join} WHERE {$visibility} ( - IFNULL(`i18n`.`value`, courses.`Name`) LIKE {$query} + {$language_name} 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_WS(', ', a.`Nachname`, a.`Vorname`) LIKE {$query} - OR CONCAT_WS(' ', a.`Nachname`, a.`Vorname`, a.`Nachname`) LIKE {$query} + OR CONCAT(a.`Nachname`, ', ', a.`Vorname`, ' ', a.`Nachname`) LIKE {$query} ) {$seminaruser} {$institute_condition} @@ -118,7 +120,7 @@ class GlobalSearchCourses extends GlobalSearchModule implements GlobalSearchFull $sql .= ", courses.`VeranstaltungsNummer`"; } - $sql .= ", IFNULL(`i18n`.`value`, courses.`Name`)"; + $sql .= ", `Name`"; $sql .= " LIMIT " . $limit; return $sql; |
