Moodle架构有变化吗?

时间:2014-12-02 00:47:49

标签: sql moodle

最近升级到Moodle 2.7,我们的客户报告他们的CustomSQL报告失败了。例如,this query用于报告可评级项目,但现在失败:

SELECT 
u.firstname AS "First",
u.lastname AS "Last",
c.fullname AS "Course",
a.name AS "Assignment"

FROM prefix_assignment_submissions AS asb
JOIN prefix_assignment AS a ON a.id = asb.assignment
JOIN prefix_user AS u ON u.id = asb.userid
JOIN prefix_course AS c ON c.id = a.course
JOIN prefix_course_modules AS cm ON c.id = cm.course

WHERE asb.grade < 0 AND cm.instance = a.id
AND cm.module = 1
ORDER BY c.fullname, a.name, u.lastname

对DB的快速查询或两个快速查询显示prefix_assignment_submissions和prefix_assignment中有零行。建议?

2 个答案:

答案 0 :(得分:2)

Moodle 2.2中的assign模块取代了赋值模块。

Moodle 2.5中默认禁用旧的赋值模块(我认为),并在Moodle 2.7中完全删除。

查询将需要重写以使用assign_submissions表(以及任何其他相关的assign_ *表)。

答案 1 :(得分:1)

我没有完整的答案,但我可以告诉你我还管理了一个Moodle 2.7系统,我的prefix_assignment_submissions表也没有记录。

此外,我可以向您提供以下查询,我写这篇查询报告课程最终成绩。我们在整个学期使用此查询进行保留建模,并在每个学期结束时将最终成绩导入我们的学生信息系统,其中idnumber表中的mdl_course将始终与所遵循的课程代码相匹配通过学生信息系统中的年/期代码。我认为它可能有用,因为它使用mdl_grade_items表的方式:该表中的itemtypes多于course。在此表格中,未评分的项目在NULL字段中的值为finalgrade。不幸的是,我不知道Moodle的内部结构足以保证每张作业都有一张记录,但这是一个起点。

SELECT u.username,u.lastname, u.firstname,c.shortname, left(c.idnumber, character_length(c.idnumber)-6) AS crs_cde, 
           right(c.idnumber,5) as yearterm,cast((gg.finalgrade/case when gi.grademax = 0 then 1 else gi.grademax end) * 100 as numeric(5,2)) finalgrade, 
         (SELECT l.letter 
          FROM mdl_context x 
          INNER JOIN mdl_grade_letters l ON l.contextid = x.id 
          WHERE x.instanceid in (c.id, 0) and l.lowerboundary <= round((gg.finalgrade/case when gi.grademax = 0 then 1 else gi.grademax end)*100,2)  
          ORDER BY x.id desc, lowerboundary desc limit 1) letter 
FROM mdl_grade_grades gg  
INNER JOIN mdl_grade_items gi ON gi.id=gg.itemid  
INNER JOIN mdl_user u ON u.id=gg.userid  
INNER JOIN mdl_course c on c.id = gi.courseid 
INNER JOIN mdl_course_categories c2 on c2.id = c.category 

WHERE gi.itemtype='course' and c2.visible = 1 and gg.finalgrade is not null  
          and char_length(c.idnumber) > 0 and right(c.idnumber,5)='20151';

当我们更新到2.7时,我们从MySQL迁移到PostgreSQL,但我需要对查询进行的唯一更改是日期处理。

还值得一提的是,版本2.3的分配模块已经彻底检修过,2.3,2.4,2.5等许多文档只是从以前的版本中复制而来。我已经看到这个过程会遗漏其他变化。这尤其适用于贡献报告之类的内容。您可能仍然看到自2.3以来无效的sql。