From 2ba930d7bb0c09504de34275d6210cbdfb643fa5 Mon Sep 17 00:00:00 2001 From: Ankit Agarwal Date: Tue, 10 Jan 2017 12:38:29 +0530 Subject: [PATCH] MDL-57027 accesslib: Improve perf of sql --- lib/accesslib.php | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/lib/accesslib.php b/lib/accesslib.php index 819355204ea..57355a8b18f 100644 --- a/lib/accesslib.php +++ b/lib/accesslib.php @@ -3987,11 +3987,15 @@ function get_users_by_capability(context $context, $capability, $fields = '', $s AND roleid IN (".implode(',', array_keys($prohibited[$cap])) ."))"; } else { - $unions[] = "SELECT ra.userid - FROM {role_assignments} ra - LEFT JOIN {role_assignments} rap ON (rap.userid = ra.userid AND rap.contextid IN ($ctxids) AND rap.roleid IN (".implode(',', array_keys($prohibited[$cap])) .")) - WHERE ra.contextid IN ($ctxids) AND ra.roleid IN (".implode(',', array_keys($needed[$cap])) .") - AND rap.id IS NULL"; + $unions[] = "SELECT userid + FROM {role_assignments} + WHERE contextid IN ($ctxids) AND roleid IN (".implode(',', array_keys($needed[$cap])) .") + AND userid NOT IN ( + SELECT userid + FROM {role_assignments} + WHERE contextid IN ($ctxids) + AND roleid IN (" . implode(',', array_keys($prohibited[$cap])) . ") + )"; } } }