在一段时间内查找活动/非活动用户的策略

时间:2013-05-06 13:42:02

标签: php mysql

我需要实现具有以下能力的机制:

  • 添加新用户
  • 删除用户
  • 启用用户
  • 禁用用户

并让管理员选择一段时间,然后显示哪些用户:

  • 在该期间的系统中可用
  • 启用
  • 禁用

结果应该是确切的一段时间。

注意:用户可能会多次启用或禁用,我需要跟踪每一次更改。因此,如果用户在3月1日到4月2日之间被禁用,如果管理员查询3月1日到4月2日之间的时间段,则不应出现在结果中,但如果管理员查询,则应将其包括在结果中任何其他时间段。

另外棘手的部分是包含在管理员查询之前添加,删除,启用或禁用的使用者。

我现在没有任何设置,所以我很想知道。实际上我正在考虑像log这样的机制,您可以稍后查询,但它应该非常快,因为我需要在很多地方使用它。

此外,我更喜欢在单个MySQL查询中执行所有操作,但PHP组合/交互也可以。

1 个答案:

答案 0 :(得分:1)

根据评论,请看慢慢变化的维度:

http://en.wikipedia.org/wiki/Slowly_changing_dimension

一个额外的顶部,我自己实施了几次。就个人而言,我发现最好有两组表,而不是一组。

将主要的一个视为具有额外rev(对于revision_id)字段的普通表:

id, rev, field1, field2

rev是修订表的外键:

id, rev, field1, field2, start_date, end_date

如果您使用Postgres来实现它,我建议您查看tsrange类型,而不是两个单独的start_date和end_date类型。

主表vs历史表使“普通”查询的表现更好,更容易索引。