Експорт оценок

Експорт оценок

от Андрій Чорний -
Количество ответов: 11

Здравствуйте, тут возникла одна проблема:
Студент записан допустим на 10 курсов, таких студентов тоже 10 чел.
каждый из них должен выполнить 50 работ
я пользуюсь и ad hoc и Configurable reports (документацию читал)


необходимо вывести ВСЕ оценки за все работы (лекции тесты задания)
Важно: даже если студент пропустил несколько работ они тоже должны быть выведены (даже с пробелом вместо оценки)

в Configurable reports есть фильтры я хотел бы допустим по id выбирать студента. НО нигде не нашел как эти фильтры работают. или же я неправильный взял подход.

кстати стандартный отчет ( site/grade/export/xls/index.php?id= )
очень хороший, но там все студенты из одного курса, а надо такой же отчет только один студент и все курсы


Помогите пожалуйста, ибо ничего по этому поводу на не нашел

В ответ на Андрій Чорний

Re: Експорт оценок

от Vadim Tabunshchik -
Изображение пользователя Developers
ибо ничего по этому поводу на не нашел

Есть масса готовых запросов на этой странице: https://docs.moodle.org/32/en/ad-hoc_contributed_reports

Вот подходящий под вашу задачу (после небольшого допиливания) запрос: Site-Wide Grade Report with All Items

Для использования фильтра в report_customsql нужно использовать конструкцию u.id=:id, где u - алиас таблицы mdl_user.

Если вам удобней, используйте поиск по lastname: u.lastname=:lastname

В любом случае, при запуске запроса сначала будет выводиться строка для ввода значения id или lastname пользователя.

Сам слегка модифицированный запрос:

CONCAT(u.lastname,' ', u.firstname) 'ФИО', 
c.fullname AS 'Курс', 
CASE
  WHEN gi.itemtype = 'course'
   THEN CONCAT('Итог курса «',c.fullname,'»')
  ELSE gi.itemname
END AS 'Деятельность',
ROUND(gg.finalgrade,2) 'Оценка',
DATE_ADD('1970-01-01', INTERVAL gi.timemodified SECOND) 'Дата'
FROM mdl_course AS c
JOIN mdl_context AS ctx ON c.id = ctx.instanceid
JOIN mdl_role_assignments AS ra ON ra.contextid = ctx.id
JOIN mdl_user AS u ON u.id = ra.userid
JOIN mdl_grade_grades AS gg ON gg.userid = u.id
JOIN mdl_grade_items AS gi ON gi.id = gg.itemid
WHERE gi.courseid = c.id
            AND u.lastname =:lastname
ORDER BY Курс, gi.id ASC
В ответ на Vadim Tabunshchik

Re: Експорт оценок

от Андрій Чорний -

Спасибо, именно этих модификаций я не знал, и как они работают пока что тоже не знаю.
вылезают ошибки - не понимаю почему.
1) Пожалуйста, используйте префикс mdl_ таблиц в SQL. Или используйте названия таблиц (без префикса), помещённые в фигурных скобках {}.

2) Нет явного префикса имен таблиц

мне удобнее по id определять студента

она в customsql другая в настраиваемых

Подскажите что я сделал не  так



В ответ на Андрій Чорний

Re: Експорт оценок

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

У вас перевод неверный, нужно: Пожалуйста, НЕ используйте префикс mdl_ таблиц в SQL…

Вместо явного префикса таблиц нужно писать или prefix_ или названия таблиц (вообще без префикса) брать в фигурные скобки:

prefix_user или {user}

И в MySQL плюсы не прокатят, нужно CONCAT использовать.

В ответ на Vadim Tabunshchik

Re: Експорт оценок

от Андрій Чорний -

угу понял. воть мой запрос

CONCAT(u.lastname,' ', u.firstname) 'ФИО', 

c.fullname AS 'Курс',  

CASE 

  WHEN gi.itemtype = 'course' 

   THEN CONCAT('Итог курса «',c.fullname,'»')

  ELSE gi.itemname

END AS 'Деятельность', 

ROUND(gg.finalgrade,2) 'Оценка',

DATE_ADD('1970-01-01', INTERVAL gi.timemodified SECOND) 'Дата' 

FROM course AS c

JOIN context AS ctx ON c.id = ctx.instanceid

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

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

JOIN grade_grades AS gg ON gg.userid = u.id

JOIN grade_items AS gi ON gi.id = gg.itemid

WHERE gi.courseid = c.id

            AND u.id=:id

ORDER BY Курс, gi.id ASC




но на него лезет ошибка


Ошибка при выполнении запроса: Ошибка чтения из базы данных You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CONCAT(u.lastname,' ', u.firstname) 'ФИО', c.fullname AS 'Курс', CAS' at line 1 CONCAT(u.lastname,' ', u.firstname) 'ФИО', c.fullname AS 'Курс', CASE WHEN gi.itemtype = 'course' THEN CONCAT('Итог курса «',c.fullname,'»') ELSE gi.itemname END AS 'Деятельность', ROUND(gg.finalgrade,2) 'Оценка', DATE_ADD('1970-01-01', INTERVAL gi.timemodified SECOND) 'Дата' FROM course AS c JOIN context AS ctx ON c.id = ctx.instanceid JOIN role_assignments AS ra ON ra.contextid = ctx.id JOIN user AS u ON u.id = ra.userid JOIN grade_grades AS gg ON gg.userid = u.id JOIN grade_items AS gi ON gi.id = gg.itemid WHERE gi.courseid = c.id AND u.id=? ORDER BY Курс, gi.id ASC LIMIT 0, 2 [array ( 0 => '88', )]

В ответ на Андрій Чорний

Re: Експорт оценок

от Vadim Tabunshchik -
Изображение пользователя Developers
угу понял. воть мой запрос

Ничо не поняль улыбаюсь

А где SELECT? А где фигурные скобки?

SELECT
    CONCAT(u.lastname,' ', u.firstname) 'ФИО'
    ,c.fullname 'Курс'
    ,CASE
      WHEN gi.itemtype = 'course'
       THEN CONCAT('Итог курса «',c.fullname,'»')
      ELSE gi.itemname
     END 'Деятельность'
    ,ROUND(gg.finalgrade,2) 'Оценка'
    ,DATE_ADD('1970-01-01', INTERVAL gi.timemodified SECOND) 'Дата'
FROM {course} c
    JOIN {context} ctx ON c.id = ctx.instanceid
    JOIN {role_assignments} ra ON ra.contextid = ctx.id
    JOIN {user} u ON u.id = ra.userid
    JOIN {grade_grades} gg ON gg.userid = u.id
    JOIN {grade_items} gi ON gi.id = gg.itemid
WHERE gi.courseid = c.id
            AND u.id=:id
ORDER BY Курс, gi.id ASC

В ответ на Vadim Tabunshchik

Re: Експорт оценок

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

Сорри,с SELECT’ом это я виноват, пропустил в этом сообщении

Доверяй, но проверяй улыбаюсь

В ответ на Vadim Tabunshchik

Re: Експорт оценок

от Андрій Чорний -

Приношу свои извинения, но есть еще вопрос: этот заброс выдает полностью то что надо, НО полностью перемешаны модули в каждом курсе (т.е. если в курсе 10 заданий то они рандомно разбросаны, а не по порядку в курсе)
можно что б этот запрос сохранял порядок в курсе?

В ответ на Андрій Чорний

Re: Експорт оценок

от Vadim Tabunshchik -
Изображение пользователя Developers
можно что б этот запрос сохранял порядок в курсе?

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

Модули размещены в секциях курса, чтобы сортировать модули по порядку секций, нужно подключать ещё, как минимум, одну таблицу. Запрос превратится в нечто громоздкое и неудобоваримое.

Если уж есть острая необходимость выводить модули в том виде, как они расположены на странице, присвойте всем оцениваемым модулям номера (idnumber) и сортируйте по ним.

В ответ на Vadim Tabunshchik

Re: Експорт оценок

от Андрій Чорний -

Progress bar это как то делает. Откровенно я не знаю как это определить.

Теперь понял. Походу буду нумеровать модулиулыбаюсь


В ответ на Андрій Чорний

Re: Експорт оценок

от Vadim Tabunshchik -
Изображение пользователя Developers
Progress bar это как то делает.

Это вы про этот блок -  Progress Bar? Загляните в его lib.php, там SQL-запросов на 1000 строк будет.

И ещё учтите, что мы пишем прямой запрос к БД на SQL, а всякие доп. плагины вдобавок к SQL могут использовать стандартные (или собственные) функции (библиотеки, классы и др.), написанные на РНР.