为什么有些用户没有出现在 Moodle 的 mdl_user_info_data 中?

why some users do not appear in mdl_user_info_data in Moodle?

我正在使用查询将学生添加到课程中,但我注意到其中 2 个没有出现(即使他们处于活动状态并被列为参与者)检查 tables 我注意到他们没有出现在 mdl_user_info_data。我怎样才能防止这种情况?或者他们没有被添加到这个 table

的原因是什么

这是我的查询:

SELECT u.id,u.username,u.firstname,u.lastname,u.email, b.data
        FROM mdl_user u,mdl_role_assignments r, mdl_user_info_data b
        WHERE u.id=r.userid
        AND u.id=b.userid
        AND r.roleid=5
        AND r.contextid = 'somecontextId'
        ORDER BY u.email ASC;

table mdl_user_info_data 保存自定义用户配置文件字段的值(在 mdl_user_info_field 中定义)。

如果用户的个人资料在创建特定的自定义用户个人资料字段后未被编辑,则不会有与他们相关的 mdl_user_info_data 记录。

请注意,如果定义了多个自定义用户字段,则可以有多个 mdl_user_info_data 字段 - 因此您的查询可以 return 每个用户多于一条记录。

您可能想将查询重写为 LEFT JOIN with mdl_user_info_data。您可能还想使用 mdl_user_info_field 进行 LEFT JOIN 以确定它与哪个自定义用户配置文件字段相关。

另请注意,您的查询做出了一些可能并不总是正确的假设 - 如果您的查询是 Moodle 代码中的 运行,那么您应该使用 {user_info_data} 而不是 'mdl_' 前缀,因为该前缀可以更改。 Hard-coding 'student' 的 roleid 5 在某些站点上也可能会失败(尽管通常是这种情况)。