首先,我有四个桌子,我正在处理。
我有一个类表,它是一个1->N的关系,一个节表,它也有一个1->N的关系和一个表。
所以把它说成是有意义的:
最后一个表是一个activityLog,,当学生访问一堂课时,使用以下方法记录该课程:
ActivityLog Row -> actorID (用户ID),classID,sectionID,lessonID
我想拿出最后的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
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我不明白为什么没有显示最新的记录。
发布于 2011-07-15 14:13:36
根据你的零钱,你觉得这个合适吗?
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,但为了以防万一,我保留了它。
发布于 2011-07-15 14:11:37
由activityLog.classID,activityLog.sectionID,activityLog.lessonID按下面的组试组
我认为它会工作,或者只是给我发送了创建脚本,我会创建这个查询。
发布于 2011-07-15 14:12:36
我希望ActivityLog里一定有个约会时间.所以试试这个:
Select s.Name, c.ClassName
From Students s
left Join On Classes c
On c.ClassId In
(Select Distinct ClassId From Classes
Where (Select Count(Distinct ClassId) From Classes ic
Join ActivityLog l On l.UserId = s.UserId
And l.ClassId = c.ClassId
Where classId = c.ClassId
And activityDateTime > l.activityDateTime)
< 5)https://stackoverflow.com/questions/6708147
复制相似问题