Moodle,mysql 按课程查询用户注册状态
Moodle, mysql query users enrolment status by course
这是 moodle 中的一个查询,用于获取课程中的校友身份。
'X'表示用户已注册,为空表示未注册。
我们必须为我们拥有的每门课程添加一个子查询......
谁能帮忙做一个更好的查询?
SELECT
user1.firstname AS Firstname,
user1.lastname AS Lastname,
user1.email AS Email,
if (exists( SELECT
ue.id
FROM mdl_user_enrolments AS ue
JOIN mdl_enrol AS en ON en.id = ue.enrolid
JOIN mdl_course AS course ON course.id = en.courseid
WHERE user1.id = ue.userid AND course.id = '1'), 'X', '') as "Enrolled Course One"
FROM mdl_user AS user1
LEFT JOIN mdl_user_enrolments AS ue ON ue.userid = user1.id
LEFT JOIN mdl_enrol AS en ON en.id = ue.enrolid
LEFT JOIN mdl_course AS course ON course.id = en.courseid
[...]
WHERE user1.deleted='0'
您可以尝试这样的操作,但如果您有很多用户和课程,则需要很长时间才能处理
SELECT CONCAT(u.id, '_', c.id) AS uniqueid,
u.id AS userid,
u.firstname,
u.lastname,
u.email,
MAX(CASE WHEN ue.id IS NULL THEN '' ELSE 'X' END) AS enrolled,
c.id AS courseid,
c.fullname AS coursename
FROM mdl_user u
CROSS JOIN mdl_course c
LEFT JOIN mdl_enrol e ON e.courseid = c.id
LEFT JOIN mdl_user_enrolments ue ON u.id = ue.userid AND ue.enrolid = e.id
WHERE u.deleted = 0
GROUP BY u.id, c.id
这是 moodle 中的一个查询,用于获取课程中的校友身份。 'X'表示用户已注册,为空表示未注册。 我们必须为我们拥有的每门课程添加一个子查询...... 谁能帮忙做一个更好的查询?
SELECT
user1.firstname AS Firstname,
user1.lastname AS Lastname,
user1.email AS Email,
if (exists( SELECT
ue.id
FROM mdl_user_enrolments AS ue
JOIN mdl_enrol AS en ON en.id = ue.enrolid
JOIN mdl_course AS course ON course.id = en.courseid
WHERE user1.id = ue.userid AND course.id = '1'), 'X', '') as "Enrolled Course One"
FROM mdl_user AS user1
LEFT JOIN mdl_user_enrolments AS ue ON ue.userid = user1.id
LEFT JOIN mdl_enrol AS en ON en.id = ue.enrolid
LEFT JOIN mdl_course AS course ON course.id = en.courseid
[...]
WHERE user1.deleted='0'
您可以尝试这样的操作,但如果您有很多用户和课程,则需要很长时间才能处理
SELECT CONCAT(u.id, '_', c.id) AS uniqueid,
u.id AS userid,
u.firstname,
u.lastname,
u.email,
MAX(CASE WHEN ue.id IS NULL THEN '' ELSE 'X' END) AS enrolled,
c.id AS courseid,
c.fullname AS coursename
FROM mdl_user u
CROSS JOIN mdl_course c
LEFT JOIN mdl_enrol e ON e.courseid = c.id
LEFT JOIN mdl_user_enrolments ue ON u.id = ue.userid AND ue.enrolid = e.id
WHERE u.deleted = 0
GROUP BY u.id, c.id