特定课程的首次访问日期或注册日期

First Access date or Enrolled date for a specific course

如果能帮助我解决这个难题,我将不胜感激!

我需要一份报告,其中仅列出用户注册特定课程(或首次访问)的确切日期。即,如果用户在两个不同的日期在网站上注册了两门课程,我需要用户开始每门课程的确切日期。 (已注册或访问)

我相信特定课程的角色分配日期应该可以解决问题,但我如何获得课程所有用户的 'role assigned' 日期?

我尝试设置一个 SQL 查询,如下所示。它为我提供了用户列表、他们注册的课程等。

但是,它为我提供了所有课程的相同创建/访问日期 - 这是站点级别的日期。我如何获得课程级别开始或角色分配日期?

如果有任何帮助,我将不胜感激。我真是无计可施!

user2.firstname AS Firstname,
user2.lastname AS Lastname,
user2.email AS Email,
user2.city AS City,

DATE_FORMAT(FROM_UNIXTIME(user2.firstaccess), '%Y-%m-%d %H:%i') AS 'Firstaccess',
DATE_FORMAT(FROM_UNIXTIME(user2.timecreated), '%Y-%m-%d %H:%i') AS 'Timecreated',
course.fullname AS Course
,(SELECT shortname FROM prefix_role WHERE id=en.roleid) AS ROLE
,(SELECT name FROM prefix_role WHERE id=en.roleid) AS RoleName
FROM prefix_course AS course 
JOIN prefix_enrol AS en ON en.courseid = course.id
JOIN prefix_user_enrolments AS ue ON ue.enrolid = en.id
JOIN prefix_user AS user2 ON ue.userid = user2.id

您无法在 moodle 3+ 中获得第一门课程。此操作不再记录,您只能获得最后的访问权限。

关于注册时间(TimeCreated),试试这个:

SELECT u.username, u.lastname, u.firstname, c.fullname, DATE_FORMAT(FROM_UNIXTIME(ue.timecreated), '%Y-%m-%d %H:%i') AS 'Timecreated' FROM prefix_user_enrolments ue LEFT JOIN prefix_enrol e ON (ue.enrolid = e.id) LEFT JOIN prefix_course c ON (e.courseid = c.id) LEFT JOIN prefix_user u ON (ue.userid = u.id)

第一次访问实际上没有意义,因为注册时间永远是两者之间最早的日期。即使用户使用自助注册。来宾课程访问可能是唯一的例外,但它不需要用户 ID,因此无论如何都会使您的报告不一致。所以 99% 的时间你会想要准确地检查用户注册,最早的日期总是注册时间。

如果您的 moodle 版本低于 3,您可以通过 prefix_log

优先访问

您可以通过查询 mdl_logstore_standard_log 事件“\core\event\course 已查看”事件名称来检索对课程的首次访问。

SELECT * FROM mdl_logstore_standard_log
WHERE eventname LIKE "%course_viewed%"
AND userid=##

timecreated 是您要查找的特定字段

如果用户未注册课程并且他们查看注册页面(针对该课程),则不会触发课程查看事件。所以你不应该得到任何误报。