Moodle 课程自定义 SQL 报告:选择学生、他们所属的组以及特定课程的最终评估成绩

问题描述 投票:0回答:1

👋

我对编程很了解,我想尝试构建一个 Moodle 自定义 SQL 查询,但到目前为止我还没有成功。

我想从用户表中选择一些字段,以及用户所属的组名称和特定的测验最终成绩,所有这些都在特定课程的上下文中。

这是我迄今为止所取得的成就:

SELECT
    u.firstname AS "First Name",
    u.lastname AS "Last Name",
    u.username AS "Username",
    u.email AS "User Email",
    g.name AS "Group Name",
    CASE
        WHEN gi.grade IS NULL THEN 'Ungraded'
        ELSE gi.grade
    END AS "Quiz Grade"
FROM
    prefix_user AS u
INNER JOIN
    prefix_user_enrolments AS ue ON u.id = ue.userid
INNER JOIN
    prefix_enrol AS e ON ue.enrolid = e.id
INNER JOIN
    prefix_course AS c ON e.courseid = c.id
LEFT JOIN
    prefix_groups_members AS gm ON u.id = gm.userid
LEFT JOIN
    prefix_groups AS g ON gm.groupid = g.id
LEFT JOIN
    prefix_quiz AS q ON c.id = q.course
LEFT JOIN
    prefix_quiz_grades AS gi ON q.id = gi.id AND u.id = gi.userid
INNER JOIN
    prefix_role_assignments AS ra ON ra.userid = u.id
INNER JOIN
    prefix_context AS ctx ON ra.contextid = ctx.id
INNER JOIN
    prefix_role AS r ON ra.roleid = r.id
WHERE
    c.id = %%COURSEID%%
    AND q.name = 'Evaluación final'
    AND r.shortname = 'student'
ORDER BY
    u.lastname, u.firstname

问题是我得到了很多重复的值(测验设置为仅一次尝试),其中一些具有不同的组名称值(课程未重复使用)。

我非常感谢您提供的任何纠正/帮助。

提前非常感谢!🙌

sql mariadb moodle moodle-api
1个回答
0
投票

您走在正确的轨道上,但由于多个角色分配、组成员身份,它可能会返回重复的值...... 您应该使用

DISTINCT
关键字来选择唯一行,并确保正确连接表。

你可以试试这个

SELECT DISTINCT
    u.firstname AS "First Name",
    u.lastname AS "Last Name",
    u.username AS "Username",
    u.email AS "User Email",
    g.name AS "Group Name",
    CASE
        WHEN gi.grade IS NULL THEN 'Ungraded'
        ELSE CAST(gi.grade AS CHAR)
    END AS "Quiz Grade"
FROM
    prefix_user AS u
INNER JOIN
    prefix_user_enrolments AS ue ON u.id = ue.userid
INNER JOIN
    prefix_enrol AS e ON ue.enrolid = e.id AND e.courseid = %%COURSEID%%
LEFT JOIN
    prefix_groups_members AS gm ON u.id = gm.userid
LEFT JOIN
    prefix_groups AS g ON gm.groupid = g.id
LEFT JOIN
    prefix_quiz AS q ON e.courseid = q.course AND q.name = 'Evaluación final'
LEFT JOIN
    prefix_quiz_grades AS gi ON q.id = gi.quiz AND u.id = gi.userid
INNER JOIN
    prefix_role_assignments AS ra ON ra.userid = u.id
INNER JOIN
    prefix_context AS ctx ON ra.contextid = ctx.id AND ctx.instanceid = %%COURSEID%%
INNER JOIN
    prefix_role AS r ON ra.roleid = r.id AND r.shortname = 'student'
ORDER BY
    u.lastname, u.firstname

在这里,您还可以在

CASE
语句中将成绩转换为字符类型,以便在结果中具有相同的数据类型。

© www.soinside.com 2019 - 2024. All rights reserved.