Moodle sql запрос, чтобы получить отчет о зачисленных и не завершенных списках зарегистрированных пользователей - PullRequest
0 голосов
/ 11 ноября 2019

Я использую отчет Adhoc для получения отчета, я хочу создать отчет о завершении. Отчет о статусе завершения всех зарегистрированных пользователей.

Я пробовал следующий запрос, но он дает только список пользователей, которые завершили. Это не показывает зарегистрированных пользователей в когорте, которые не закончили. Пожалуйста, помогите мне с этим. Я хочу создать отчет для зарегистрированных пользователей, завершенный и не завершенный.

SELECT u.username, u.firstname,u.lastname,u.email,
DATE_FORMAT(FROM_UNIXTIME(p.timecompleted),'%Y-%m-%d') AS 
completed,p.timecompleted
FROM prefix_course_completions AS p
JOIN prefix_course AS c ON p.course = c.id
JOIN prefix_user AS u ON p.userid = u.id
INNER JOIN prefix_cohort_members AS co ON co.cohortid=u.id
WHERE c.id=361 AND co.cohortid=142
ORDER BY u.username

1 Ответ

0 голосов
/ 14 ноября 2019

Мне кажется, я нашел хотя бы часть вашей проблемы.

В вашем запросе вы делаете INNER JOIN prefix_cohort_members AS co ON co.cohortid=u.id. Это соединение идентификатора группы с идентификатором пользователя, а не идентификатором пользователя с идентификатором пользователя. Я считаю, что правильная строка - INNER JOIN prefix_cohort_members AS co ON co.userid=u.id

Также в вашем запросе вы делаете DATE_FORMAT(FROM_UNIXTIME(p.timecompleted),'%Y-%m-%d') AS completed и p.timecompleted, которые оба возвращают завершенное время. Я не уверен, что это то, что вы хотели, но если вы хотите отобразить дату зачисления, это добавит, что для вас

DATE_FORMAT(FROM_UNIXTIME(p.timeenrolled),'%Y-%m-%d') AS enrolled

С этими двумя изменениями я смог создать отчет со строкой, содержащейbool, который показывает, закончил ли пользователь курс или не использует этот блок:

CASE 
when p.timecompleted is null THEN 'False'
ELSE 'True'
END AS completed

ПРИМЕЧАНИЕ. Я также не использовал внутреннее соединение, вместо этого выбрав JOIN. Я не уверен, что это изменило ситуацию, но если указанные выше изменения не работают для вас, то может помочь изменение внутреннего соединения на просто JOIN.

...