Вывести список курсов у которых отсутствует содержание
Количество ответов: 6Re: Вывести список курсов у которых отсутствует содержание
,(SELECT COUNT(*) FROM mdl_role_assignments raa WHERE raa.roleid = 3 AND raa.contextid = cx.id) AS Students
,(SELECT COUNT(*) FROM mdl_course_modules cm WHERE cm.course = c.id) AS Modules
FROM mdl_role_assignments rar
LEFT JOIN mdl_context cx ON (rar.contextid = cx.id)
RIGHT JOIN mdl_course c ON cx.instanceid = c.id
LEFT JOIN mdl_user u ON (rar.userid = u.id)
LEFT JOIN mdl_role r ON (rar.roleid = r.id)
LEFT JOIN mdl_course_categories as cc ON cc.id = c.category
LEFT JOIN mdl_role_assignments AS ra ON ra.userid = u.id
GROUP BY c.id HAVING modules<=1
ORDER BY c.id ASC
Есть ложные срабатывания((
Re: Вывести список курсов у которых отсутствует содержание
Если нужно посчитать кол-во ресурсов, элементов курса, то причём тут студенты?
Re: Вывести список курсов у которых отсутствует содержание
Re: Вывести список курсов у которых отсутствует содержание
SELECT concat('https://ИМЯ-САЙТА/course/view.php?id=',c.id) AS Link_Course_ID
,c.id AS Course_ID
,c.shortname AS Course_Shortname
,c.fullname AS Course_Fullname
,CONCAT(u.firstname,' ', u.lastname) AS Teachers_Name
,(SELECT COUNT(*) FROM mdl_role_assignments raa WHERE raa.roleid = 3 and raa.contextid=cx.id) AS Num_Teachers
,(SELECT COUNT(*) FROM mdl_role_assignments raa WHERE raa.roleid = 5 and raa.contextid=cx.id) AS Students
,(SELECT COUNT(*) FROM mdl_course_sections sec WHERE c.id = sec.course AND sec.sequence!='') AS Chapters
,(SELECT COUNT(*) FROM mdl_course_modules cm WHERE cm.course = c.id) AS Modules
,(SELECT COUNT(*) FROM mdl_course_modules res WHERE c.id = res.course AND res.module IN (3,11,8,12,15,17,20)) AS Resourses
,(SELECT COUNT(*) FROM mdl_course_modules ele WHERE c.id = ele.course AND ele.module IN (1,4,5,6,7,9,10,13,16,18,19,21,22,23,24)) AS Еlements
,(SELECT Count(*) FROM mdl_question q INNER JOIN mdl_question_categories qc ON qc.id = q.category AND q.qtype <> 'random' AND q.parent = 0 INNER JOIN mdl_context ctx ON ctx.id = qc.contextid WHERE ctx.instanceid = c.id AND ctx.contextlevel = 50) AS Questions
FROM mdl_role_assignments rar
LEFT JOIN mdl_context cx ON (rar.contextid = cx.id)
RIGHT JOIN mdl_course c ON cx.instanceid = c.id
LEFT JOIN mdl_user u ON (rar.userid = u.id)
LEFT JOIN mdl_role r ON (rar.roleid = r.id)
LEFT JOIN mdl_course_categories as cc ON cc.id = c.category
LEFT JOIN mdl_role_assignments AS ra ON ra.userid = u.id
WHERE c.visible = '1'
GROUP BY c.id
ORDER BY c.id ASC
Если преподавателей на курсе несколько, как их вывести например через запятую? Спасибо!
Re: Вывести список курсов у которых отсутствует содержание
,c.id AS Course_ID
,c.shortname AS Course_Shortname
,c.fullname AS Course_Fullname
,(SELECT GROUP_CONCAT(u.firstname,' ', u.lastname)
FROM mdl_course ctn
JOIN mdl_context ct ON ctn.id = ct.instanceid
JOIN mdl_role_assignments ra ON ra.contextid = ct.id
JOIN mdl_user u ON u.id = ra.userid
JOIN mdl_role r ON r.id = ra.roleid
WHERE r.id = 3 AND ctn.id = c.id) as Teachers_Name
,(SELECT COUNT(*) FROM mdl_role_assignments raa WHERE raa.roleid = 3 and raa.contextid=cx.id) AS Num_Teachers
,(SELECT COUNT(*) FROM mdl_role_assignments raa WHERE raa.roleid = 5 and raa.contextid=cx.id) AS Students
,(SELECT COUNT(*) FROM mdl_course_sections sec WHERE c.id = sec.course AND sec.sequence!='') AS Chapters
,(SELECT COUNT(*) FROM mdl_course_modules cm WHERE cm.course = c.id) AS Modules
,(SELECT COUNT(*) FROM mdl_course_modules res WHERE c.id = res.course AND res.module IN (3,11,8,12,15,17,20)) AS Resourses
,(SELECT COUNT(*) FROM mdl_course_modules ele WHERE c.id = ele.course AND ele.module IN (1,4,5,6,7,9,10,13,16,18,19,21,22,23,24)) AS Еlements
,(SELECT Count(*) FROM mdl_question q INNER JOIN mdl_question_categories qc ON qc.id = q.category AND q.qtype <> 'random' AND q.parent = 0 INNER JOIN mdl_context ctx ON ctx.id = qc.contextid WHERE ctx.instanceid = c.id AND ctx.contextlevel = 50) AS Questions
FROM mdl_role_assignments rar
LEFT JOIN mdl_context cx ON (rar.contextid = cx.id)
RIGHT JOIN mdl_course c ON cx.instanceid = c.id
LEFT JOIN mdl_user u ON (rar.userid = u.id)
LEFT JOIN mdl_role r ON (rar.roleid = r.id)
LEFT JOIN mdl_course_categories as cc ON cc.id = c.category
LEFT JOIN mdl_role_assignments AS ra ON ra.userid = u.id
WHERE c.visible = '1'
GROUP BY c.id
ORDER BY c.id ASC
Re: Вывести список курсов у которых отсутствует содержание
И вам спасибо, Дмитрий.
Но есть пара замечаний:
существенное - идентификаторы модулей могут не совпадать, поэтому вместо res.module IN (3,11,8,12,15,17,20) и ele.module IN (1,4,5,6,7,9,10,13,16,18,19,21,22,23,24) я бы сделал так:
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'))
и
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'))
Проще сюда вписать название своего дополнительно установленного модуля, чем выискивать его идентификатор в базе данных, имхо.
Ещё: вопросы считаются только из банка вопросов курса, а ведь они могут находиться и в банке вопросов теста. Мы на форуме это уже обсуждали и запрос есть. Надо его прикрутить сюда.
несущественное:
- исключить главную страницу сайта, добавив AND c.id > 1 в последний WHERE c.visible = '1'
- объединить ссылку на курс с полным названием курса: CONCAT('<strong><a target="_blank" href="%%WWWROOT%%/course/view.php',CHAR(63),'id=',c.id,'">',c.fullname,'</a></strong>') 'Полное название курса'
- в GROUP_CONCAT добавил бы другой разделитель, запятая - неудобно, когда много преподавателей. Перенос строки будет красивШе: SEPARATOR '\n'
Пока выглядит так (для блока «Настраиваемые отчеты» и плагина report_customsql):
SELECT
c.id 'ID курса'
,c.shortname 'Короткое название курса'
,CONCAT('<strong><a target="_blank" href="%%WWWROOT%%/course/view.php',CHAR(63),'id=',c.id,'">',c.fullname,'</a></strong>') 'Полное название курса'
,(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
GROUP BY c.id
ORDER BY c.fullname ASC