首先,我要处理 4 个表。
我有一个 classes 表,它与 sections 表有 1->N 关系,而 sections 表也有 1->N 关系 lessons 表格。
所以从透视的角度来看:
- 类(class)
- 部分
- 类(class)
- 部分
最后一个表是activityLog,当学生访问类(class)时,使用以下内容记录:
ActivityLog 行 -> actorID(用户 ID)、classID、sectionID、lessonID
我想提取学生访问过的最后 5 节独特类(class)。我尝试同时使用 DISTINCT 和 GROUP BY 但没有成功。
每次都返回相同的记录,而不是他们访问过的最新类(class)。
使用分组方式
SELECT activityLog.actorID, activityLog.activityDate,
strClasses.classID, strClasses.className,
strSections.sectionID, strSections.sectionName,
strLessons.lessonID, strLessons.lessonName
FROM activityLog
LEFT JOIN strClasses ON strClasses.classID = activityLog.classID
LEFT JOIN strSections ON strSections.sectionID = activityLog.sectionID
LEFT JOIN strLessons ON strLessons.lessonID = activityLog.lessonID
WHERE activityLog.activityTypeID = 6 AND activityLog.actorID = 3
GROUP BY activityLog.lessonID
ORDER BY activityLog.activityDate DESC
LIMIT 5
使用不同的
SELECT DISTINCT activityLog.actorID,
strClasses.classID, strClasses.className,
strSections.sectionID, strSections.sectionName,
strLessons.lessonID, strLessons.lessonName
FROM activityLog
LEFT JOIN strClasses ON strClasses.classID = activityLog.classID
LEFT JOIN strSections ON strSections.sectionID = activityLog.sectionID
LEFT JOIN strLessons ON strLessons.lessonID = activityLog.lessonID
WHERE activityLog.activityTypeID = 6 AND activityLog.actorID = 3
ORDER BY activityLog.activityDate DESC
LIMIT 5
我不明白为什么没有显示最新的记录。
最佳答案
根据您的变化,这对您来说如何?
SELECT activityLog.actorID, activityLog.activityDate,
strClasses.classID, strClasses.className,
strSections.sectionID, strSections.sectionName,
strLessons.lessonID, strLessons.lessonName
FROM activityLog
LEFT JOIN strClasses ON strClasses.classID = activityLog.classID
LEFT JOIN strSections ON strSections.sectionID = activityLog.sectionID
LEFT JOIN strLessons ON strLessons.lessonID = activityLog.lessonID
WHERE activityLog.activityTypeID = 6 AND activityLog.actorID = 3
AND activityLog.activityDate = (SELECT MAX(activityDate) FROM activityLog AS lookup WHERE lessonID = activityLog.lessonID)
ORDER BY activityLog.activityDate DESC
LIMIT 5
根据您的描述,我不确定您为什么要使用 LEFT JOIN
,但为了以防万一,我还是保留了它。
关于MySQL SELECT DISTINCT ORDER BY问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6708147/