MySQL:一个输出的多个查询

时间:2015-08-17 17:51:28

标签: mysql sql

观看各种帖子,我仍然在努力创建一个查询。我试图在课程中摆脱用户进程。这是我的数据库设置。

COURSE TABLE:
(CourseID | Product |  CourseName | TotalModules | CreationDate)

MODULE TABLE:
(ModuleID | Product | ModuleName | TotalPages | CreationDate)

MODULECOURSEASSOCIATION TABLE:
(CourseID | ModuleID | CreationDate)

User TABLE:
(UserID | StudentEmail | CreationDate)

PROGRESSION TABLE:
(ProgressionID | ModuleID | UserID | PageNumber, CreationDate)

Progression表记录了ProgressionIDs,用户看到的模块以及相关日期。我想要完成的是:

在课程级别上有一个总页面进度计数。

即。一个CourseID" 1",可能有3个模块。 3个模块中的每一个都有3个与之关联的页面。所以课程共有9页,#34; A"在ProductID = 2。

UserID" 1"已经在ProductID = 2的第一个模块中看到了第1页,第2页,第3页。然后,进展计数应为30%。如何在查询中写这个?

我试过了:

SELECT count(1) AS TotalModulesCompleted 
FROM (select count(PageNumber) AS NumPages,
      (select TotalPages 
      from Module, ModuleCourseAssociation 
      where Module.ModuleID = ModuleCourseAssociation.ModuleID and 
      ModuleCourseAssociation.CourseID = 1 and Module.ProductID = 2) AS TotalPages, 
      (select CourseID from ModuleCourseAssociation
       where ModuleCourseAssociation.ModuleID = Progression.ModuleID
       and CourseID=8) AS CourseID
FROM Progression WHERE UserID = 11 GROUP by ModuleID) 
CourseProgression
WHERE NumPages = TotalPages;

我很失落。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

我认为您需要针对某个特定学生的每门课程提供此信息。

您已请求完成百分比。因此,您将需要查询中的两条信息:

  • 课程总页数
  • 用户已阅读的总页数

考虑到这一点,只要正确加载数据库,以下内容应该有效:

SELECT
  c.CourseID
  ,c.CourseName
  ,SUM(m.TotalPages) AS CourseTotalPages
  ,SUM(up.PageNumber) AS UserTotalPages
  ,SUM(up.PageNumber) / SUM(m.TotalPages) AS UserPercentageComplete
FROM `Course` c
JOIN `ModuleCourseAssociation` cm ON c.CourseID = cm.CourseID
JOIN `Module` m ON cm.ModuleID = m.ModuleID
LEFT JOIN `Progression` up ON m.ModuleID = up.ProgressionID
LEFT JOIN `User` u ON up.UserID = u.UserID
WHERE c.ProductID = 2
  AND (u.UserID = 11 OR u.UserID IS NULL)    -- Cats or nothing
GROUP BY c.CourseID
  ,c.CourseName

我提供了一个SQLFiddle here