【问题标题】:Moodle SQL assignment result/statusMoodle SQL 分配结果/状态
【发布时间】:2015-02-20 05:58:23
【问题描述】:

我从 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

【问题讨论】:

  • 您应该为我们可以使用的表提供一些描述(哪个包含分数,哪个包含项目名称?)。并定义数据库供应商。
  • 一些数据和预期输出对您有很大帮助。

标签: sql moodle


【解决方案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

【讨论】:

  • 拉塞尔干得好。你能帮我一个忙吗,我如何添加作业的提交状态,比如已提交或未提交?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-20
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多