我需要实现具有以下能力的机制:
并让管理员选择一段时间,然后显示哪些用户:
结果应该是确切的一段时间。
注意:用户可能会多次启用或禁用,我需要跟踪每一次更改。因此,如果用户在3月1日到4月2日之间被禁用,如果管理员查询3月1日到4月2日之间的时间段,则不应出现在结果中,但如果管理员查询,则应将其包括在结果中任何其他时间段。
另外棘手的部分是包含在管理员查询之前添加,删除,启用或禁用的使用者。
我现在没有任何设置,所以我很想知道。实际上我正在考虑像log
这样的机制,您可以稍后查询,但它应该非常快,因为我需要在很多地方使用它。
此外,我更喜欢在单个MySQL查询中执行所有操作,但PHP组合/交互也可以。
答案 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历史表使“普通”查询的表现更好,更容易索引。