From df986a59fcab2edd5d6d1c396dad9b79f7e52db9 Mon Sep 17 00:00:00 2001 From: Adrian Greeve Date: Fri, 11 May 2018 10:02:34 +0800 Subject: [PATCH] MDL-61814 report_stats: Update to sql to increase performance. --- report/stats/classes/privacy/provider.php | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/report/stats/classes/privacy/provider.php b/report/stats/classes/privacy/provider.php index 7dc8b837f6a..5db4f4f8bb1 100644 --- a/report/stats/classes/privacy/provider.php +++ b/report/stats/classes/privacy/provider.php @@ -87,16 +87,27 @@ class provider implements \core_privacy\local\metadata\provider, \core_privacy\l * @return contextlist $contextlist The contextlist containing the list of contexts used in this plugin. */ public static function get_contexts_for_userid(int $userid) : contextlist { - $params = ['dailyuser' => $userid, 'weeklyuser' => $userid, 'monthlyuser' => $userid, 'contextcourse' => CONTEXT_COURSE]; + $params = ['userid' => $userid, 'contextcourse' => CONTEXT_COURSE]; $sql = "SELECT ctx.id FROM {context} ctx - LEFT JOIN {stats_user_daily} sud ON sud.courseid = ctx.instanceid - LEFT JOIN {stats_user_weekly} suw ON suw.courseid = ctx.instanceid - LEFT JOIN {stats_user_monthly} sum ON sum.courseid = ctx.instanceid - WHERE ctx.contextlevel = :contextcourse - AND (sud.userid = :dailyuser OR suw.userid = :weeklyuser OR sum.userid = :monthlyuser)"; + JOIN {stats_user_daily} sud ON sud.courseid = ctx.instanceid AND sud.userid = :userid + WHERE ctx.contextlevel = :contextcourse"; + $contextlist = new contextlist(); $contextlist->add_from_sql($sql, $params); + + $sql = "SELECT ctx.id + FROM {context} ctx + JOIN {stats_user_weekly} suw ON suw.courseid = ctx.instanceid AND suw.userid = :userid + WHERE ctx.contextlevel = :contextcourse"; + $contextlist->add_from_sql($sql, $params); + + $sql = "SELECT ctx.id + FROM {context} ctx + JOIN {stats_user_monthly} sum ON sum.courseid = ctx.instanceid AND sum.userid = :userid + WHERE ctx.contextlevel = :contextcourse"; + $contextlist->add_from_sql($sql, $params); + return $contextlist; }