Moodle SQL分配结果/状态

时间:2015-02-20 05:58:23

标签: sql moodle

我从Moodle SQL scripts获得了这个SQL代码如何使结果包含所有项目名称是否有分数? prefix_grade_grade 表包含分数 prefix_grade_items 表中包含项目名称 不确定哪些供应商,这些脚本在Moodle LMS开源系统中使用

SELECT u.firstname AS 'Name' , u.lastname AS 'Surname', c.fullname AS 'Course', cc.name AS 'Category', 
CASE WHEN gi.itemtype = 'Course'    
THEN c.fullname + ' Course Total'  
ELSE gi.itemname 
END AS 'Item Name', ROUND(gg.finalgrade / gg.rawgrademax * 100 ,2) AS Percentage

FROM prefix_course AS c 
JOIN prefix_context AS ctx ON c.id = ctx.instanceid 
JOIN prefix_role_assignments AS ra ON ra.contextid = ctx.id 
JOIN prefix_user AS u ON u.id = ra.userid 
JOIN prefix_grade_grades AS gg ON gg.userid = u.id 
JOIN prefix_grade_items AS gi ON gi.id = gg.itemid 
JOIN prefix_course_categories AS cc ON cc.id = c.category 
WHERE gi.courseid = c.id AND gi.itemname != 'Attendance' AND gi.itemmodule != 'scorm'
ORDER BY `Name` ASC

1 个答案:

答案 0 :(得分:1)

你可能只需要为grade_grades和grade_items切换JOIN,然后在grade_grades上进行LEFT JOIN。我还将WHERE条件移动到gi JOIN:

JOIN prefix_grade_items AS gi ON gi.courseid = c.id AND gi.itemname != 'Attendance' AND gi.itemmodule != 'scorm'
LEFT JOIN prefix_grade_grades AS gg ON gg.userid = u.id AND gg.itemid = gi.id

Moodle可以使用Mysql,Postgresql,MariaDB,SQL Server和Oracle - 因此查询是通用的。这里有一些可用于跨数据库兼容查询的函数:https://docs.moodle.org/dev/Data_manipulation_API#SQL_compatibility_functions