From 47d04704c6470e3883bc6ffa835c343c78b0f6b8 Mon Sep 17 00:00:00 2001 From: NeillM Date: Mon, 16 Sep 2013 09:51:34 +0100 Subject: [PATCH] Duplicate fix that will work on MSSQL --- locallib.php | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/locallib.php b/locallib.php index 5d50ff6..011c56c 100644 --- a/locallib.php +++ b/locallib.php @@ -1135,7 +1135,12 @@ class attendance { $where = "ats.attendanceid = :aid AND ats.sessdate >= :csdate"; } - $sql = "SELECT ats.id, ats.groupid, ats.sessdate, ats.duration, ats.description, al.statusid, al.remarks + // We need to add this concatination so that moodle will use it as the array index that is a string. + // If the array's index is a number it will not merge entries. + // It would be better as a UNION query butunfortunatly MS SQL does not seem to support doing a DISTINCT on a the description field. + $id = $DB->sql_concat(':value', 'ats.id'); + + $sql = "SELECT $id, ats.id, ats.groupid, ats.sessdate, ats.duration, ats.description, al.statusid, al.remarks FROM {attendance_sessions} ats RIGHT JOIN {attendance_log} al ON ats.id = al.sessionid AND al.studentid = :uid @@ -1147,7 +1152,8 @@ class attendance { 'aid' => $this->id, 'csdate' => $this->course->startdate, 'sdate' => $this->pageparams->startdate, - 'edate' => $this->pageparams->enddate); + 'edate' => $this->pageparams->enddate, + 'value' => 'c'); $sessions = $DB->get_records_sql($sql, $params); // All sessions for current groups. @@ -1163,7 +1169,7 @@ class attendance { $where = "ats.attendanceid = :aid AND ats.sessdate >= :csdate AND ats.groupid $gsql"; } - $sql = "SELECT ats.id, ats.groupid, ats.sessdate, ats.duration, ats.description, al.statusid, al.remarks + $sql = "SELECT $id, ats.id, ats.groupid, ats.sessdate, ats.duration, ats.description, al.statusid, al.remarks FROM {attendance_sessions} ats LEFT JOIN {attendance_log} al ON ats.id = al.sessionid AND al.studentid = :uid