首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL按问题选择不同的顺序

MySQL按问题选择不同的顺序
EN

Stack Overflow用户
提问于 2011-07-15 14:01:55
回答 3查看 1.6K关注 0票数 2

首先,我有四个桌子,我正在处理。

我有一个表,它是一个1->N的关系,一个表,它也有一个1->N的关系和一个表。

所以把它说成是有意义的:

  • Classes
    • Sections
      • Lessons

最后一个表是一个activityLog,,当学生访问一堂课时,使用以下方法记录该课程:

ActivityLog Row -> actorID (用户ID),classID,sectionID,lessonID

我想拿出最后的5独特的课程,学生已经访问过。我试着使用不同的和分组的,但都没有成功。

每次都会返回相同的记录,而不是他们访问过的最新类。

用组

代码语言:javascript
复制
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

使用不同

代码语言:javascript
复制
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

我不明白为什么没有显示最新的记录。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-15 14:13:36

根据你的零钱,你觉得这个合适吗?

代码语言:javascript
复制
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,但为了以防万一,我保留了它。

票数 2
EN

Stack Overflow用户

发布于 2011-07-15 14:11:37

由activityLog.classID,activityLog.sectionID,activityLog.lessonID按下面的组试组

我认为它会工作,或者只是给我发送了创建脚本,我会创建这个查询。

票数 0
EN

Stack Overflow用户

发布于 2011-07-15 14:12:36

我希望ActivityLog里一定有个约会时间.所以试试这个:

代码语言:javascript
复制
 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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6708147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档