Configurable reports - кол-во ресурсов+кол-во вопросов

Configurable reports - кол-во ресурсов+кол-во вопросов

от Игорь М -
Количество ответов: 36

Чем ближе аккредитация, тем больше "пахнет жареным" улыбаюсь)))

На этом форуме по теме запросов в вышеуказанном блоке в разных темах есть два замечательных запроса - на количество ресурсов в курсе и количество вопросов в курсе. 

У меня эти запросы работают отдельно и всем все нравится. Особенно администрации - вся деятельность налицо, хоть и с оговорками - я привел им пример про один файл с десятью заданиями и десяти файлов с одним заданием.

И сейчас у меня мысль возникла - а можно как то объединить эти два запроса? Чтобы В списке дисциплины после количества тестов сразу выводилось количество вопросов в банке вопросов этой дисциплины? 

У меня с тех тем вот такие запросы

на количество ресурсов

SELECT concat('<a target="_new" href="%%WWWROOT%%/course/index.php?categoryid=', cc.id,'">', cc.name, '</a>') AS "Кафедра",
concat('<a target="_new" href="%%WWWROOT%%/course/view.php?id=',c.id,'">',c.fullname,'</a>') AS "Дисциплина",
(SELECT DISTINCT concat(u.lastname, ' ', u.firstname)
FROM prefix_role_assignments AS ra
JOIN prefix_user AS u ON ra.userid = u.id
JOIN prefix_context AS ctx ON ctx.id = ra.contextid
WHERE ra.roleid = 3 AND ctx.instanceid = c.id AND ctx.contextlevel = 50 LIMIT 1) AS "Преподаватель",
(SELECT COUNT(*) FROM prefix_course_modules AS cm WHERE cm.course = c.id AND cm.module= 1) AS "Задание",
(SELECT COUNT(*) FROM prefix_course_modules AS cm WHERE cm.course = c.id AND cm.module= 16) AS "Тест",
(SELECT COUNT(*) FROM prefix_course_modules AS cm WHERE cm.course = c.id AND cm.module= 3) AS "Книга",
(SELECT COUNT(*) FROM prefix_course_modules AS cm WHERE cm.course = c.id AND cm.module= 4) AS "Чат",
(SELECT COUNT(*) FROM prefix_course_modules AS cm WHERE cm.course = c.id AND cm.module= 5) AS "Опрос",
(SELECT COUNT(*) FROM prefix_course_modules AS cm WHERE cm.course = c.id AND cm.module= 6) AS "База данных",
(SELECT COUNT(*) FROM prefix_course_modules AS cm WHERE cm.course = c.id AND cm.module= 7) AS "Обратная связь",
(SELECT COUNT(*) FROM prefix_course_modules AS cm WHERE cm.course = c.id AND cm.module= 9) AS "Форум",
(SELECT COUNT(*) FROM prefix_course_modules AS cm WHERE cm.course = c.id AND cm.module= 8) AS "Папка",
(SELECT COUNT(*) FROM prefix_course_modules AS cm WHERE cm.course = c.id AND cm.module= 10) AS "Глоссарий",
(SELECT COUNT(*) FROM prefix_course_modules AS cm WHERE cm.course = c.id AND cm.module= 12) AS "Пояснение",
(SELECT COUNT(*) FROM prefix_course_modules AS cm WHERE cm.course = c.id AND cm.module= 13) AS "Лекция",
(SELECT COUNT(*) FROM prefix_course_modules AS cm WHERE cm.course = c.id AND cm.module= 14) AS "Внешний ресурс",
(SELECT COUNT(*) FROM prefix_course_modules AS cm WHERE cm.course = c.id AND cm.module= 15) AS "Страница",
(SELECT COUNT(*) FROM prefix_course_modules AS cm WHERE cm.course = c.id AND cm.module= 17) AS "Файл",
(SELECT COUNT(*) FROM prefix_course_modules AS cm WHERE cm.course = c.id AND cm.module= 18) AS "SCORM",
(SELECT COUNT(*) FROM prefix_course_modules AS cm WHERE cm.course = c.id AND cm.module= 19) AS "Анкета",
(SELECT COUNT(*) FROM prefix_course_modules AS cm WHERE cm.course = c.id AND cm.module= 20) AS "Гиперссылка",
(SELECT COUNT(*) FROM prefix_course_modules AS cm WHERE cm.course = c.id AND cm.module= 21) AS "Вики",
(SELECT COUNT(*) FROM prefix_course_modules AS cm WHERE cm.course = c.id AND cm.module= 22) AS "Семинар"
FROM `prefix_course` AS c
JOIN `prefix_course_categories` AS cc ON cc.id = c.category
WHERE cc.name != 'АРХІВ'
%%FILTER_CATEGORIES:c.category%%
GROUP BY c.id
ORDER BY cc.name ASC

----------------------------------------

А это - на количество вопросов - самый простой из вышеуказанной темы

SELECT
concat('<a target="_blank" href="%%WWWROOT%%/question/edit.php',CHAR(63),'courseid=',c.id,'">',c.fullname,'</a>') 'Курс',
Count(q.id) 'Вопросов'
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
INNER JOIN {course} c ON c.id = ctx.instanceid AND ctx.contextlevel = 50
GROUP BY
c.id
ORDER BY
c.fullname

-------------------------

Можно как то их объединить? Повторюсь, что эти запросы для меня сродни китайской азбуке, и методом "научного тыка" мне удалось только добавить еще одну строку "Курс"... И на этом все грущу 

Кстати, чем хорош последний запрос - он показывает только те дисциплины, где есть в банке вопросов хоть один вопрос, пустые он просто не показывает. Но при объединении запросов этого и не нужно - в первом запросе идет фильтрация по кафедрам, и если в дисциплине нет банка вопросов - значит ,это должно показать. 

Чтобы получался примерно вот такой вот результат:

Кафедра - 080101.65 ЭКОНОМИЧЕСКАЯ БЕЗОПАСНОСТЬ

Дисциплина - Экономический анализ

Преподаватель - Иванова ИИ

Заданий - 5

Тестов - 0

Вопросов в банке данных - 0

Модулей типа "Книга" - 0

Чатов - 1

Опросов - 1

Модулей типа "База данных" - 0

Модулей типа "Обратная связь" - 0

Форумов - 1

Папок с файлами - 4

Глоссариев - 1

Модулей "Пояснение" (простой текст) - 3

Модулей "Лекция" (НЕ ФАЙЛ!) - 1

Внешних ресурсов - 0

Веб-страниц - 6

Файлов - 1

ресурсов типа SCORM - 0

Анкет - 2

Гиперссылок - 9

Вики - 1

Модулей типа "Семинар" - 2

--------------------------

Насколько сложно это сделать?

В ответ на Игорь М

Re: Configurable reports - кол-во ресурсов+кол-во вопросов

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода

Как уже писал в другой теме, правильнее вместо

(SELECT COUNT(*) FROM prefix_course_modules AS cm WHERE cm.course = c.id AND cm.module= 16) AS "Тест",

писать

(SELECT COUNT(*) FROM prefix_course_modules AS cm INNER JOIN prefix_modules AS m ON cm.module = m.id WHERE cm.course = c.id AND m.name = 'quiz') AS "Тест",

Такой запрос может быть помедленней, но он максимально универсален, и будет без изменения работать на любом moodle.

Для вопросов просто добавьте после семинаров добавьте строчку

(SELECT Count(*)  FROM prefix_question q INNER JOIN prefix_question_categories qc ON qc.id = q.category AND q.qtype <> 'random' AND q.parent = 0 INNER JOIN prefix_context ctx ON ctx.id = qc.contextid WHERE ctx.instanceid = c.id AND ctx.contextlevel = 50) AS 'Вопросов'

Только потом, пожалуйста, выложите сюда полностью готовый и отлаженный запрос, чтобы все могли воспользоваться

В ответ на Vadim Dvorovenko

Re: Configurable reports - кол-во ресурсов+кол-во вопросов

от Игорь М -

Только потом, пожалуйста, выложите сюда полностью готовый и отлаженный запрос, чтобы все могли воспользоваться

Да, конечно, о чем разговор - вот, что у меня благодаря авторам запросов и Вам получилось и отлично работает:

----------------------------------

SELECT concat('<a target="_new" href="%%WWWROOT%%/course/index.php?categoryid=', cc.id,'">', cc.name, '</a>') AS "Кафедра",
concat('<a target="_new" href="%%WWWROOT%%/course/view.php?id=',c.id,'">',c.fullname,'</a>') AS "Дисциплина",
(SELECT DISTINCT concat(u.lastname, ' ', u.firstname)
FROM
prefix_role_assignments AS ra
JOIN prefix_user AS u ON ra.userid = u.id
JOIN prefix_context AS ctx ON ctx.id = ra.contextid
WHERE ra.roleid = 3 AND ctx.instanceid = c.id AND ctx.contextlevel = 50 LIMIT 1) AS "Преподаватель",
(SELECT COUNT(*) FROM prefix_course_modules AS cm INNER JOIN prefix_modules AS m ON cm.module = m.id WHERE cm.course = c.id AND m.name = 'assign') AS "Задание",
(SELECT COUNT(*) FROM prefix_course_modules AS cm INNER JOIN prefix_modules AS m ON cm.module = m.id WHERE cm.course = c.id AND m.name = 'quiz') AS "Тест",
(SELECT COUNT(*) FROM prefix_course_modules AS cm INNER JOIN prefix_modules AS m ON cm.module = m.id WHERE cm.course = c.id AND m.name = 'book') AS "Книга",
(SELECT COUNT(*) FROM prefix_course_modules AS cm INNER JOIN prefix_modules AS m ON cm.module = m.id WHERE cm.course = c.id AND m.name = 'chat') AS "Чат",
(SELECT COUNT(*) FROM prefix_course_modules AS cm INNER JOIN prefix_modules AS m ON cm.module = m.id WHERE cm.course = c.id AND m.name = 'choice') AS "Опрос",
(SELECT COUNT(*) FROM prefix_course_modules AS cm INNER JOIN prefix_modules AS m ON cm.module = m.id WHERE cm.course = c.id AND m.name = 'data') AS "База данных",
(SELECT COUNT(*) FROM prefix_course_modules AS cm INNER JOIN prefix_modules AS m ON cm.module = m.id WHERE cm.course = c.id AND m.name = 'feedback') AS "Обратная связь",
(SELECT COUNT(*) FROM prefix_course_modules AS cm INNER JOIN prefix_modules AS m ON cm.module = m.id WHERE cm.course = c.id AND m.name = 'forum') AS "Форум",
(SELECT COUNT(*) FROM prefix_course_modules AS cm INNER JOIN prefix_modules AS m ON cm.module = m.id WHERE cm.course = c.id AND m.name = 'folder') AS "Папка",
(SELECT COUNT(*) FROM prefix_course_modules AS cm INNER JOIN prefix_modules AS m ON cm.module = m.id WHERE cm.course = c.id AND m.name = 'glossary') AS "Глоссарий",
(SELECT COUNT(*) FROM prefix_course_modules AS cm INNER JOIN prefix_modules AS m ON cm.module = m.id WHERE cm.course = c.id AND m.name = 'label') AS "Пояснение",
(SELECT COUNT(*) FROM prefix_course_modules AS cm INNER JOIN prefix_modules AS m ON cm.module = m.id WHERE cm.course = c.id AND m.name = 'lesson') AS "Лекция",
(SELECT COUNT(*) FROM prefix_course_modules AS cm INNER JOIN prefix_modules AS m ON cm.module = m.id WHERE cm.course = c.id AND m.name = 'lti') AS "Внешний ресурс",
(SELECT COUNT(*) FROM prefix_course_modules AS cm INNER JOIN prefix_modules AS m ON cm.module = m.id WHERE cm.course = c.id AND m.name = 'page') AS "Страница",
(SELECT COUNT(*) FROM prefix_course_modules AS cm INNER JOIN prefix_modules AS m ON cm.module = m.id WHERE cm.course = c.id AND m.name = 'resource') AS "Файл",
(SELECT COUNT(*) FROM prefix_course_modules AS cm INNER JOIN prefix_modules AS m ON cm.module = m.id WHERE cm.course = c.id AND m.name = 'scorm') AS "SCORM",
(SELECT COUNT(*) FROM prefix_course_modules AS cm INNER JOIN prefix_modules AS m ON cm.module = m.id WHERE cm.course = c.id AND m.name = 'survey') AS "Анкета",
(SELECT COUNT(*) FROM prefix_course_modules AS cm INNER JOIN prefix_modules AS m ON cm.module = m.id WHERE cm.course = c.id AND m.name = 'url') AS "Гиперссылка",
(SELECT COUNT(*) FROM prefix_course_modules AS cm INNER JOIN prefix_modules AS m ON cm.module = m.id WHERE cm.course = c.id AND m.name = 'wiki') AS "Вики",
(SELECT COUNT(*) FROM prefix_course_modules AS cm INNER JOIN prefix_modules AS m ON cm.module = m.id WHERE cm.course = c.id AND m.name = 'workshop') AS "Семинар",
(SELECT COUNT(*) FROM prefix_course_modules AS cm INNER JOIN prefix_modules AS m ON cm.module = m.id WHERE cm.course = c.id AND m.name = 'quiz') AS "Тест",
(SELECT Count(*) FROM prefix_question q INNER JOIN prefix_question_categories qc ON qc.id = q.category AND q.qtype <> 'random' AND q.parent = 0 INNER JOIN prefix_context ctx ON ctx.id = qc.contextid WHERE ctx.instanceid = c.id AND ctx.contextlevel = 50) AS 'Вопросов'
FROM `prefix_course` AS c
JOIN `prefix_course_categories` AS cc ON cc.id = c.category
WHERE cc.name != 'АРХІВ'
%%FILTER_CATEGORIES:c.category%%
GROUP BY c.id
ORDER BY cc.name ASC

----------------------------------

Работает фильтр по Категориям курса.

Если у кого-то установлен модуль субкурс, то нужно добавить строку 

(SELECT COUNT(*) FROM prefix_course_modules AS cm INNER JOIN prefix_modules AS m ON cm.module = m.id WHERE cm.course = c.id AND m.name = 'subcourse') AS "Субкурс",

Мне в наших условиях это показалось не нужным и я его не прописывал. 

 

Все отлично работает, гонял по всем категориям - все отлично... Но, как всегда, появилось новое НО... улыбаюсь

Моя логика никак не хочет совпадать с логикой SQL улыбаюсь

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

Значит, полез я в в саму базу SQL (уже без опасения, прогресс улыбаюсь) и нашел там таблицы ,в которых прописаны категории. И вот, например, id категории 172, а называется она Горные машины и оборудование. сама Таблица называется mdl_course_categories И вот куда теперь эти данные подставить в существующем запросе, чтобы выходил не весь список абсолютно всех дисциплин, а только из категории этого самого Горного дела? Если я правильно понимаю, то в запросе cc.id как раз обозначается id категории, а cc.name - имя столбца с названием категории. Пытался подставить эти данные вместо этих сс - но, видимо, это не то. Где что можно изменить, чтобы выводился отчет по конкретной категории?

В ответ на Игорь М

Re: Configurable reports - кол-во ресурсов+кол-во вопросов

от Игорь М -

Что то не могу нормально код вставить...

В ответ на Игорь М

Re: Configurable reports - кол-во ресурсов+кол-во вопросов

от Игорь М -

Кстати... а подсчет файлов именно в ресурсе "Папка" возможно сюда приделать? В принципе ,никто не интересовался, просто ради интереса...

В ответ на Игорь М

Re: Configurable reports - кол-во ресурсов+кол-во вопросов

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода

Про папку - можно, но там будет трёхэтажный запрос, поэтому давайте я его не буду писать, если он никому реально не нужен ))

Если у вас в дисциплинах - это подкатегории, то пишите WHERE cc.name != 'АРХІВ' AND cc.parent = 172

Если дисциплины, это уже курсы внутри категории Горное дело, то WHERE cc.name != 'АРХІВ' AND cc.id = 172

В ответ на Vadim Dvorovenko

Re: Configurable reports - кол-во ресурсов+кол-во вопросов

от Виктория Малиатаки -

А возможен ли запрос на подсчет файлов в Модуле giportfolio? (извините, что встреваю в чужую тему, но я вижу, что вы мне сможете помочь )) )

Дело в том, что у нас в нём реализовано портфолио студентов - средствами модуля созданы разделы, в них, соответственно, файлы. 

С SQL-запросами только начинаю разбираться, поэтому сама сообразить, возможно ли подсчитать кол-во файлов, загруженных студентами в разделы, пока не могу.


В ответ на Игорь М

Re: Configurable reports - кол-во ресурсов+кол-во вопросов

от Alexandre Scherbyna -

Спасибо, но проблема в том, что подсчитываются только тестовые вопросы, содержащиеся в банке курса. А вопросы, содержащиеся в самих тестах, не учитываются.

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

В ответ на Alexandre Scherbyna

Re: Configurable reports - кол-во ресурсов+кол-во вопросов

от Игорь М -

Да, я видел эту тему, но у нас преподаватели не делают вопросы непосредственно в тесте - как я им изначально показал, как нужно - они так и забивают. улыбаюсь 

Однако и тот запрос я тоже отдельно прописал в блоке - мало ли, на всякий случай. Сперва таки было бы - отдельные запросы, но тогда полной картинки не виделось - у кого что есть, а чего нет по предметам. Например, Банк вопросов показывает списки из 12 дисциплин, а на деле их 35 - и сиди, сверяй потом ,какие есть, каких нет. А должны быть у всех...

В ответ на Игорь М

Re: Configurable reports - кол-во ресурсов+кол-во вопросов

от Alexandre Scherbyna -

Я тоже учу преподавателей, что вопросы надо создавать в банке, но есть люди, которые изучают Moodle самостоятельно, и делают всё интуитивно. Как гласит закон Мерфи: "Если механизм можно собрать неправильным образом, то всегда найдется человек, который так и сделает".

В ответ на Alexandre Scherbyna

Re: Configurable reports - кол-во ресурсов+кол-во вопросов

от Игорь М -

Ну... Это не про наших... Хотя да - всегда найдется товарищ, которому может просто показаться интересным - "а чей та такое?" улыбаюсь

В ответ на Alexandre Scherbyna

Re: Configurable reports - кол-во ресурсов+кол-во вопросов

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода
Ну тогда нужно писать

(SELECT Count(*) FROM prefix_question q INNER JOIN prefix_question_categories qc ON qc.id = q.category AND q.qtype <> 'random' AND q.parent = 0 INNER JOIN prefix_context ctx ON ctx.id = qc.contextid WHERE ctx.instanceid = c.id AND ctx.contextlevel = 50) +
(SELECT Count(*) FROM {question} q INNER JOIN {question_categories} qc ON q.category = qc.id AND q.qtype <> 'random' AND q.parent = '0' INNER JOIN {context} ctx ON qc.contextid = ctx.id AND ctx.contextlevel = '70' INNER JOIN {course_modules} cm ON ctx.instanceid = cm.id AND cm.module = (SELECT m.id FROM {modules} m WHERE m.name='quiz') WHERE cm.course = c.id)
AS 'Вопросов'


В ответ на Vadim Dvorovenko

Re: Configurable reports - кол-во ресурсов+кол-во вопросов

от Alexandre Scherbyna -

Хочу от всего сообщества поблагодарить Игоря и Вадима за проделанную работу. 

На мой взгляд, в таком отчете нуждается практически каждый сайт.
В ответ на Vadim Dvorovenko

Re: Configurable reports - кол-во ресурсов+кол-во вопросов

от Игорь М -

ДА, все работает, включая поиск по конкретной категории, все просто отлично! Просто огромное спасибище! 

В ответ на Vadim Dvorovenko

Re: Configurable reports - кол-во ресурсов+кол-во вопросов

от Alexandre Scherbyna -

У меня на одном из сайтов названия категорий на верхних уровнях - разные, а на самом нижнем уровне они совпадают (в разных филиалах есть одноименные кафедры). Поэтому, когда выбираешь название кафедры остается непонятным, к какому филиалу она относится. грущу Не хотелось бы из-за этого добавлять в названия кафедр аббревиатуру филиала.

Есть ли возможность если не фильтровать, то хотя бы выводить отчет отсортированным по филиалам (то есть по категориям курсов верхних уровней), или хотя бы выводить их названия перед названием кафедры в отчете?

Спасибо!

В ответ на Alexandre Scherbyna

Re: Configurable reports - кол-во ресурсов+кол-во вопросов

от Игорь М -

Я у себя сделал фильтры по конкретным категориям, например, Отчет по специальности "Горное дело" - и указал id конкретной категории в строке

WHERE cc.name != 'АРХІВ' AND cc.id = 175

вот 175 - это номер категории. У меня, кстати, специальность - это именно подкатегории, которые находятся в основной категории "УМК дисциплин". Ну, как выше предлагал Вадим.

Об этом речь?

В ответ на Игорь М

Re: Configurable reports - кол-во ресурсов+кол-во вопросов

от Игорь М -

А вот кстати... По преподавателям у меня так и не получилось сделать фильтрацию. Что то делаю не так, но что - не пойму. Где в запросе, например, id преподавателя дописать, чтобы по нему вся эта информация выводилось, что в вышеуказанном запросе?

В ответ на Игорь М

Re: Configurable reports - кол-во ресурсов+кол-во вопросов

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода
По преподавателям просто так не сделаете, нужно переписывать запрос. Потому что сейчас у вас выводятся все курсы из категории, а преподаватель определяется вложенным запросом, как первый из тех, кому назначена роль преподавателя в курсе.
Тут тогда придётся объединять курсы, категории, контексты, роли и назначения ролей в основной запрос и из него уже фильтровать по пользователям. Соответственно, если 2 преподавателя ведут курс, в этом случае без фильтрации в отчёте один курс будет фигурировать 2 раза, с одним и со вторым преподавателем. А если роль не назначена (наследуется сверху), то курса не будет в списке вообще. как-то так

SELECT

  concat(u.lastname, ' ', u.firstname) AS "Преподаватель",

  concat('<a target="_new" href="%%WWWROOT%%/course/view.php?id=',c.id,'">',c.fullname,'</a>') AS "Курс",

  ...

FROM

prefix_course_categories AS cc

INNER JOIN prefix_course AS c ON c.category = cc.id

INNER JOIN prefix_context AS ctx ON ctx.instanceid = c.id AND ctx.contextlevel = 50

INNER JOIN prefix_role_assignments AS ra ON ra.contextid = ctx.id

INNER JOIN prefix_user AS u ON u.id = ra.userid

INNER JOIN prefix_role AS r ON r.id = ra.roleid AND r.name = 'teacher'

 

WHERE 1 = 1

%%FILTER_CATEGORIES:c.category%%

%%FILTER_USERS:u.id%%

ORDER BY cc.name, u.lastname, u.firstname, c.fullname ASC



или добавить в WHERE  исходного запроса

AND EXISTS (SELECT 1 FROM prefix_role_assignments AS ra JOIN prefix_user AS u ON ra.userid = u.id JOIN prefix_context AS ctx ON ctx.id = ra.contextid WHERE ra.roleid = 3 AND ctx.instanceid = c.id AND ctx.contextlevel = 50 %%FILTER_USERS:u.id%%)
В ответ на Vadim Dvorovenko

Re: Configurable reports - кол-во ресурсов+кол-во вопросов

от Адриан Гросу -
Вадим, добрый день!
Старая уже, конечно, тема, но запросы отсюда очень помогли!
Возникла необходимость в запросе по полноценному выводу всей информации о курсах, вывести не одного преподавателя, а всех и вписать допустим их через запятую. Не подскажете, как это можно реализовать?
Вы в этом ответе написали:
"или добавить в WHERE  исходного запроса 

AND EXISTS (SELECT 1 FROM prefix_role_assignments AS ra JOIN prefix_user AS u ON ra.userid = u.id JOIN prefix_context AS ctx ON ctx.id = ra.contextid WHERE ra.roleid = 3 AND ctx.instanceid = c.id AND ctx.contextlevel = 50 %%FILTER_USERS:u.id%%)"

Это случайно не то, что я как раз таки ищу? и куда именно добавить если то?
Был бы очень признателен за вашу помощь!
В ответ на Адриан Гросу

Re: Configurable reports - кол-во ресурсов+кол-во вопросов

от Адриан Гросу -
К моей радости, смог наконец разобраться как это сделать. Если вдруг кому-нибудь нужен будет аналогичный вариант запроса с получением всех преподавателей то можно воспользоваться функцией group_concat(...), вместо concat(...)
В ответ на Адриан Гросу

Re: Configurable reports - кол-во ресурсов+кол-во вопросов

от Александр Анисимов -
Изображение пользователя Майнтейнер перевода Изображение пользователя Эксперт по Moodle
Сообщество будет очень признательным, если бы Вы привели полный текст запроса - со всеми изменениями...
В ответ на Игорь М

Re: Configurable reports - кол-во ресурсов+кол-во вопросов

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода

если нужно вывести название родителя, добавьте отдельную колонку

(SELECT cc1.name from `prefix_course_categories` AS cc1 where cc1.id = cc.parent) as "Родитель",

если родителя родителя

(SELECT (SELECT cc2.name from `prefix_course_categories` AS cc2 where cc2.id = cc1.parent) from `prefix_course_categories` AS cc1 where cc1.id = cc.parent) as "РодительРодителя",


В ответ на Vadim Dvorovenko

Re: Configurable reports - кол-во ресурсов+кол-во вопросов

от Alexandre Scherbyna -

Спасибо, Вадим! Прекрасно работает. Как говорится, аппетит приходит во время еды. улыбаюсь

А колонку с количеством записанных на курс студентов можно в этот отчет добавить?

В ответ на Игорь М

Re: Configurable reports - кол-во ресурсов+кол-во вопросов

от Alexandre Scherbyna -

Спасибо. А есть возможность не прописывать каждый раз 175 и т.п. руками, а автоматически подставлять номер той категории, из которой вызывается отчет?

В ответ на Alexandre Scherbyna

Re: Configurable reports - кол-во ресурсов+кол-во вопросов

от Victor Sundukov -
Уважаемые коллеги, помогите неопытному администратору. Установил плагин, но не знаю как к нему обратиться. MOODLE 3.3.1+. Как его увидеть и как его настроить?1
В ответ на Victor Sundukov

Re: Configurable reports - кол-во ресурсов+кол-во вопросов

от Victor Sundukov -

Обратился к вам и помогло, после переключения интерфейса в настройках обращение к плагину появилось в блоках!

В ответ на Игорь М

Re: Configurable reports - кол-во ресурсов+кол-во вопросов

от Виктория Малиатаки -
Спасибо за отличный отчет. Очень полезно и своевременно.

Может быть пригодится кому - попыталась добавить к нему вывод количества студентов и количество разделов в курсе.  Возможно, правда, "криво" добавила, ибо только начинаю разбираться в SQL. Но работает же )    На латинице названия, так как на Windows ...


................ //....................

WHERE ra.roleid = 3 AND ctx.instanceid = c.id AND ctx.contextlevel = 50 LIMIT 1) AS "Prepodavatel",


(SELECT COUNT(*)

FROM

prefix_role_assignments AS ra

JOIN prefix_user AS u ON ra.userid = u.id

JOIN prefix_context AS ctx ON ctx.id = ra.contextid

WHERE ra.roleid = 5 AND ctx.instanceid = c.id AND ctx.contextlevel = 50 LIMIT 1) AS "Studentov",

(SELECT COUNT(*) FROM {course_sections} sec WHERE c.id = sec.course AND sec.sequence!='') AS "Kol-vo razdelov",

В ответ на Виктория Малиатаки

Re: Configurable reports - кол-во ресурсов+кол-во вопросов

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода

Да, Вы всё правильно сделали.

Есть советы:

не мешать нотацию {course_sections} и prefix_course_section, делать весь запрос в одной нотации. Лично мне удобнее делать так - в phpmyadmin отработать весь запрос в варианте mdl_имятаблицы. После этого в блокнот, замену mdl_ на prefix_, и этот запрос уже в configurable reports.

По ролям. Чтобы на зависеть от идентификаторов и чтобы было также универсально, как и с модулями вместо

prefix_role_assignments AS ra
JOIN prefix_user AS u ON ra.userid = u.id
JOIN prefix_context AS ctx ON ctx.id = ra.contextid
WHERE ra.roleid = 5 AND ctx.instanceid = c.id AND ctx.contextlevel = 50
лучше

prefix_role_assignments AS ra
JOIN prefix_user AS u ON ra.userid = u.id
JOIN prefix_context AS ctx ON ctx.id = ra.contextid
JOIN prefix_role AS r ON r.id = ra.roleid

WHERE r.shortname = 'student' АND ctx.instanceid = c.id AND ctx.contextlevel = 50

Кстати, я ошибся в одном сообщений выше, там должно быть

r.shortname = 'teacher' вместо r.name = 'teacher'
И если у Вас хороший запрос получился, вы его проверили в работе, не поленитесь выложить его целиком, чтобы желающим не приходилось потом по всем сообщениям форума его собирать по кусочкам

В ответ на Игорь М

Re: Configurable reports - кол-во ресурсов+кол-во вопросов + КОНТЕКСТ

от Alexandre Scherbyna -

Уважаемые коллеги! Хочется вызывать этот отчет из страницы, где расположен список курсов кафедры, так, чтобы он выводил данные именно по этой кафедре, причем сразу, без поиска кафедры в меню.

Выше было описано, как прописать ID категории курсов кафедры прямо в отчете, но не хочется делать это вручную для каждой кафедры, т.к. их более полусотни. Можно ли этот ID взять из URL страницы, из которой вызывается отчет?

Что-то подобное описано в документации по Conigurable report. Отчет выдает данные по тому курсу, из которого его вызывают. Но как это делается я разобраться не смог.

Могут ли наши знатоки нам помочь и объяснить?

В ответ на Игорь М

Re: Configurable reports - кол-во ресурсов+кол-во вопросов

от Alexandre Scherbyna -

Уважаемые знатоки! Скажите, пожалуйста, что в этом замечательном запросе нужно подправить, чтобы он НЕ выводил скрытые курсы? 

Спасибо!

В ответ на Alexandre Scherbyna

Re: Configurable reports - кол-во ресурсов+кол-во вопросов

от Vadim Tabunshchik -
Изображение пользователя Developers

Так а где сам запрос, что править? улыбаюсь

В условие WHERE нужно подставить mdl_course.visible = '1'

В ответ на Vadim Tabunshchik

Re: Configurable reports - кол-во ресурсов+кол-во вопросов

от Alexandre Scherbyna -
Спасибо, Вадим!
Для тех, кто тоже не хочет видеть в отчете скрытых курсов, уточняю, что нужно в последний WHERE добавить c.visible = '1'.
Например, в моем отчете, где также игнорируются курсы в категориях АРХІВ,  это выглядит так:
WHERE cc.name != 'АРХІВ' AND c.visible = '1'
В ответ на Игорь М

Re: Configurable reports - кол-во ресурсов+кол-во вопросов

от Alexandre Scherbyna -

Уважаемые знатоки!

Наш замечательный отчет выводит чего и сколько есть в каждом курсе. Но не дает информации о том, насколько интенсивно каждый курс используется.

Скажите пожалуйста, как добавить в этот отчет колонку, показывающую общее количество записей в логах курса за последнюю неделю, например. Или подскажите другие отчеты, которые дают информацию о посещаемости курсов в разрезе кафедр и факультетов. 

Спасибо!

В ответ на Alexandre Scherbyna

Re: Configurable reports - кол-во ресурсов+кол-во вопросов

от Alexandre Scherbyna -

Сам отвечу на свой вопрос. 

Чтобы добавить в рассмотренные выше варианты отчета столбец, показывающий общее количество записей в логах курса, можно, например, перед количеством студентов добавить:

(SELECT COUNT(*) FROM prefix_logstore_standard_log AS lg WHERE lg.courseid=c.id) AS "Действий всего",

Напомню, что срок, в течение которого сохраняются логи, определяется параметром loglifetime

Еще можно вывести количество логов за последнюю неделю, например:

(SELECT COUNT(*) FROM prefix_logstore_standard_log AS lg WHERE lg.courseid=c.id and DATEDIFF( NOW(),FROM_UNIXTIME(lg.timecreated)) <= 7) AS "За последнюю неделю",