最新尝试的 scrom 完成状态

问题描述 投票:0回答:1

我正在尝试获取用户最近/最后一次尝试的 SCORM 完成报告。但是使用下面的代码,我得到了用户所做的所有尝试,例如尝试 1,2...例如,用户的最新/最后一次尝试是 2,那么我只希望输出中的尝试次数为 2,但在这里我得到了两者完成/未完成的 1 次和 2 次尝试。任何 SQL 查询都会有所帮助。

#这是我的代码

SELECT u.firstname AS First, u.lastname AS Last, c.fullname AS Course, sc.name as scromname, st.attempt AS Attempt, st.value AS Status,
FROM_UNIXTIME(st.timemodified,"%m-%d-%Y") AS Date 
FROM mdl_scorm_scoes_track AS st 
JOIN mdl_user AS u ON st.userid=u.id
JOIN mdl_scorm AS sc ON sc.id=st.scormid
JOIN mdl_course AS c ON c.id=sc.course
WHERE st.element='cmi.core.lesson_status'
UNION
SELECT user2.firstname AS First, user2.lastname AS Last, c.fullname AS Course, sc.name as scromname, "-" AS Attempt, "not_started" AS Status, "-" AS Date
FROM mdl_user_enrolments AS ue
JOIN mdl_enrol AS e ON e.id = ue.enrolid
JOIN mdl_course AS c ON c.id = e.courseid
JOIN mdl_user AS user2 ON user2 .id = ue.userid
JOIN mdl_scorm AS sc ON sc.course=c.id
left Join mdl_scorm_scoes_track AS st on st.scormid=sc.id AND st.userid=user2.id
WHERE  st.timemodified IS NULL
ORDER BY  Course, Last, First, Attempt
mysql sql moodle
1个回答
0
投票

我对你的模式了解不多,但我还是会描述这个想法。希望您能够为您的模式实现这个想法,但如果没有,那么您将需要提供更多信息。

基本上,我们假设有一个 tries 表,像这样:

tries(id, dt, user_id, ...someothercolumns...)

现在,让我们做一个

left join
排除所有非最新元素,像这样:

select tries1.dt, tries1.user_id, ...
from tries tries1
lef join tries tries2
on tries1.user_id = tries2.user_id and tries1.dt < tries2.dt
where tries2.id is null;

说明:

  • 我们正在搜索
    tries1
  • 的任何记录
  • 不存在任何
    tries2
    记录
    • 分享用户
    • 比 tries1
© www.soinside.com 2019 - 2024. All rights reserved.