Как получить список не пустых тем каждого преподавателя в системе с помощью SQL?

Как получить список не пустых тем каждого преподавателя в системе с помощью SQL?

от Дмитрий Михальцов -
Количество ответов: 7

Здравствуйте! Для подсчета активности преподавателей на дистанционном обучении стоит задача получить ЗАПОЛНЕННЫЕ темы в курсах преподавателей. Каждый час у нас в организации засчитывается за опубликованную преподавателем какую-либо заполненную контентом тему. Пустые темы естественно игнорировать. На выходе нужны ФИО преподавателя, а также количество не пустых тем на каждом из его курсов. Как такое можно реализовать через SQL к самой базе?

Например, как на скриншоте, учитывать первую, но не учитывать остальные две.

Moodle 3.4.2,
CentOS,
MySQL,
reg.ru

Приложение Screenshot_1.png
В ответ на Дмитрий Михальцов

Re: Как получить список не пустых тем каждого преподавателя в системе с помощью SQL?

от Николай Козловский -
Ищите по форуму информацию по модулю Специальные запросы к базе данных.
В темах есть примеры запросов. Только вам придется с логом работать, в таблицах я не нашел связь ресурса с преподавателем, в системе преподаватель привязан к курсу, и если как в примере их несколько, то работу каждого не выбрать.
Мы стали анализировать просто количество размещенных ресурсов в разрезе курса. Если не найдете, могу сбросить отчет.
В ответ на Николай Козловский

Re: Как получить список не пустых тем каждого преподавателя в системе с помощью SQL?

от Дмитрий Михальцов -
Да, пожалуйста, скиньте этот отчёт. А он конкретные ресурсы считывает, или все?
В ответ на Дмитрий Михальцов

Re: Как получить список не пустых тем каждого преподавателя в системе с помощью SQL?

от Николай Козловский -
SELECT
c.id 'ID курса'
,c.shortname 'Короткое название курса'
,CONCAT('',c.fullname,'') 'Полное название курса'
,(SELECT GROUP_CONCAT(u.firstname,' ', u.lastname SEPARATOR '\n')
FROM {course} ctn
JOIN {context} ct ON ctn.id = ct.instanceid
JOIN {role_assignments} ra ON ra.contextid = ct.id
JOIN {user} u ON u.id = ra.userid
JOIN {role} r ON r.id = ra.roleid
WHERE r.id = 3 AND ctn.id = c.id) 'Преподаватель'
,(SELECT COUNT(*) FROM {role_assignments} raa WHERE raa.roleid = 3 and raa.contextid=cx.id) 'Кол-во преподавателей'
,(SELECT COUNT(*) FROM {role_assignments} raa WHERE raa.roleid = 5 and raa.contextid=cx.id) 'Студентов'
,(SELECT COUNT(*) FROM {course_sections} sec WHERE c.id = sec.course AND sec.sequence!='') 'Разделов'
,(SELECT COUNT(*) FROM {course_modules} cm WHERE cm.course = c.id) 'Модулей'
,(SELECT COUNT(*) FROM {course_modules} res WHERE c.id = res.course
AND res.module IN (
SELECT m.id FROM {course_modules} cm JOIN {modules} m ON cm.module=m.id
WHERE m.name IN ('label','book','page','url','imscp','folder','resource'))
) 'Ресурсов'
,(SELECT COUNT(*) FROM {course_modules} ele WHERE c.id = ele.course
AND ele.module IN (
SELECT m.id FROM {course_modules} cm JOIN {modules} m ON cm.module=m.id
WHERE m.name IN ('assignment','chat','choice','data','forum','glossary','lesson','quiz',
'scorm','survey','wiki','workshop','feedback','lti','assign','questionnaire','subcourse'))
) 'Элементов курса'
,(SELECT Count(*) FROM {question} q INNER JOIN {question_categories} qc ON qc.id = q.category AND q.qtype <> 'random'
AND q.parent = 0 INNER JOIN {context} ctx ON ctx.id = qc.contextid WHERE ctx.instanceid = c.id AND ctx.contextlevel = 50) 'Тестовых вопросов'
FROM {role_assignments} rar
LEFT JOIN {context} cx ON (rar.contextid = cx.id)
RIGHT JOIN {course} c ON cx.instanceid = c.id
LEFT JOIN {user} u ON (rar.userid = u.id)
LEFT JOIN {role} r ON (rar.roleid = r.id)
LEFT JOIN {course_categories} cc ON cc.id = c.category
LEFT JOIN {role_assignments} ra ON ra.userid = u.id
WHERE c.visible = '1' AND c.id > 1 AND c.shortname LIKE '%-20)%'
GROUP BY c.id
ORDER BY c.fullname ASC
В ответ на Николай Козловский

Re: Как получить список не пустых тем каждого преподавателя в системе с помощью SQL?

от Дмитрий Михальцов -
Странно, почему-то ваш запрос не вернул никаких результатов.
В ответ на Дмитрий Михальцов

Re: Как получить список не пустых тем каждого преподавателя в системе с помощью SQL?

от Николай Козловский -
WHERE c.visible = '1' AND c.id > 1 AND c.shortname LIKE '%-20)%'
замените на
WHERE c.visible = '1' AND c.id > 1
это я сбросил пример запроса по 2020 году, где в коротком названии курса всегда есть строка "-20"
Запрос возвращает
id курса Короткое название курса Полное название курса Преподаватель Кол-во преподавателей Студентов Разделов Модулей Ресурсов Элементов курса Тестовых вопросов
Вам можно ориентироваться на количество созданных элементов.
Если нужно именно работать с темами, то нужно разбираться с таблицей course_sections
В ответ на Николай Козловский

Re: Как получить список не пустых тем каждого преподавателя в системе с помощью SQL?

от Дмитрий Михальцов -
Спасибо большое, а это норма, что плагин экспортирует кириллицу в csv некорректно?
В ответ на Дмитрий Михальцов

Re: Как получить список не пустых тем каждого преподавателя в системе с помощью SQL?

от Николай Козловский -
Это вы скорее всего csv в Excel открываете. Там надо вручную кодировку указывать через Данные> Импорт из текста.
Если в Notepad++ открывать то все нормально.