MDL-57027 accesslib: Improve perf of sql

This commit is contained in:
Ankit Agarwal
2017-02-01 13:07:47 +08:00
committed by Andrew Nicols
parent 650197e4dc
commit 2ba930d7bb
+9 -5
View File
@@ -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])) . ")
)";
}
}
}