MDL-26371 sql - avoid distinct + text in lesson essay & report

This commit is contained in:
Eloy Lafuente (stronk7)
2011-02-12 17:34:03 +01:00
parent b37d06c2ed
commit e07c51c481
2 changed files with 15 additions and 8 deletions
+11 -6
View File
@@ -135,12 +135,17 @@ switch ($mode) {
} else {
$queryadd = '';
$params = array ("lessonid" => $lesson->id);
if (!$users = $DB->get_records_sql("SELECT DISTINCT u.id, u.*
FROM {user} u,
{lesson_attempts} a
WHERE a.lessonid = :lessonid and
u.id = a.userid
ORDER BY u.lastname", $params)) {
// Need to use inner view to avoid distinct + text
if (!$users = $DB->get_records_sql("
SELECT u.*
FROM {user} u
JOIN (
SELECT DISTINCT u.id
FROM {user} u,
{lesson_attempts} a
WHERE a.lessonid = :lessonid and
u.id = a.userid) ui ON (u.id = ui.id)
ORDER BY u.lastname", $params)) {
print_error('cannotfinduser', 'lesson');
}
}
+4 -2
View File
@@ -41,10 +41,12 @@ require_login($course, false, $cm);
$context = get_context_instance(CONTEXT_MODULE, $cm->id);
require_capability('mod/lesson:manage', $context);
$ufields = user_picture::fields('u'); // These fields are enough
$params = array("lessonid" => $lesson->id);
// TODO: Improve this. Fetching all students always is crazy!
if (!empty($cm->groupingid)) {
$params["groupid"] = $cm->groupingid;
$sql = "SELECT DISTINCT u.id, u.*
$sql = "SELECT DISTINCT $ufields
FROM {lesson_attempts} a
INNER JOIN {user} u ON u.id = a.userid
INNER JOIN {groups_members} gm ON gm.userid = u.id
@@ -52,7 +54,7 @@ if (!empty($cm->groupingid)) {
WHERE a.lessonid = :lessonid
ORDER BY u.lastname";
} else {
$sql = "SELECT DISTINCT u.id, u.*
$sql = "SELECT DISTINCT $ufields
FROM {user} u,
{lesson_attempts} a
WHERE a.lessonid = :lessonid and