From 1399c7e3503b231ba1bd377d08514d2da5111d3c Mon Sep 17 00:00:00 2001 From: Simey Lameze Date: Tue, 3 Apr 2018 12:55:40 +0800 Subject: [PATCH] MDL-61435 core_tag: improve get_tags_by_area_in_contexts performance --- tag/classes/tag.php | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/tag/classes/tag.php b/tag/classes/tag.php index 0c933161058..c41f80f9260 100644 --- a/tag/classes/tag.php +++ b/tag/classes/tag.php @@ -1754,15 +1754,16 @@ class core_tag_tag { list($contextsql, $contextsqlparams) = $DB->get_in_or_equal($contextids); $params = array_merge($params, $contextsqlparams); - $subsql = "SELECT tagid - FROM {tag_instance} + $subsql = "SELECT DISTINCT t.id + FROM {tag} t + JOIN {tag_instance} ti ON t.id = ti.tagid WHERE component = ? AND itemtype = ? - AND contextid {$contextsql} - GROUP BY tagid"; - $sql = "SELECT * - FROM {tag} - WHERE id IN ({$subsql})"; + AND contextid {$contextsql}"; + + $sql = "SELECT tt.* + FROM ($subsql) tv + JOIN {tag} tt ON tt.id = tv.id"; return array_map(function($record) { return new core_tag_tag($record);