【问题标题】:Storing and retrieving historical data of user's learning progress存储和检索用户学习进度的历史数据
【发布时间】:2015-12-26 22:56:54
【问题描述】:

前言:我正在开发一个应用程序,可以就多个主题对用户进行测验。我希望保留他们的进度历史记录,并能够轻松地向用户展示他们每个主题的进度的每日、每周和每月视图。

我的表的初始设计如下:

CREATE TABLE IF NOT EXISTS `user_topics` (
  `ProgressID` int(11) NOT NULL,
  `UserID` int(11) NOT NULL,
  `TopicID` int(11) NOT NULL,
  `Level` decimal(3,1) NOT NULL,
  `TotalCorrect` int(11) NOT NULL,
  `QuestionsAsked` int(11) NOT NULL,
  `DateTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
   PRIMARY KEY (`ProgressID`)
 ) 

我是否走在正确的道路上/如何检索我需要的数据以提供可展示的历史记录?

编辑:

我想显示一个以时间为比例和正确百分比的图表,这将在用户点击查看其主题的每月/每周进度时完成。我希望查看每个主题的每周/每月数据之间的加载时间非常透明。

是否应该在一次调用中检索数据(只需选择从日期 x 到现在的行)然后将其留给单个客户将数据组织成天/月等,然后呈现数据?

【问题讨论】:

  • 您要检索什么样的数据?至于可观的历史,这取决于你。对于历史记录,每次保存用户统计信息时只需创建一个新行。记录此数据后,对于历史历史查询,请执行 WHERE UserID = '132' AND DateTime between now() - interval 7 day and now() 之类的查询 - 当然,您需要根据需要进行扩展。
  • 应该有另一个表,我认为progressID是外键
  • @paabobo 为什么需要它?
  • progressID 表示该表的 id,如果我在示例中让它自动递增,也许会更清楚。
  • 拥有一个主键 auto_increment 总是一个好主意,这样你就不用担心唯一性了。仅当您想将数据与不适合 user_topics 表的记录关联时,使用 progressID 作为另一个表中的外键才有意义,例如由于一对多关系或多对-许多关系,但在这种情况下,您需要 2 个额外的表,一个用于关系,一个用于其他类型的数据。

标签: php mysql


【解决方案1】:

您可以使用 date_between 查询两个日期之间的所有进度记录,如下所示:

SELECT * FROM 'user_topics' WHERE 'DateTime' between '2008-12-23' AND '2008-12-25';

here is the mysql documentation for 'between ... and ...'

所以现在,使用一些绘图工具,您可以获得过去一天/一周/一个月/一年的所有进度并展示他们的进度。

【讨论】:

  • 感谢您的回复,我知道能够在日期之间进行查询,我想我对数据访问应该发挥多大作用感到更加困惑。例如,我是否只执行一个大调用来检索我需要呈现每周和每月视图的数据?
  • 我会得到一个过去一年的查询,然后将信息存储在 memcache 或其他一些缓存框架中,这样您就不需要继续进行查询了。你可以让缓存的数据在 5 分钟后过期,这样用户在浏览结果时会有流畅的体验,我猜他们不需要更新并以小于 5 分钟的间隔显示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多