如何获得数据库条目的正确“版本”?

时间:2013-03-31 17:39:34

标签: mysql

更新:问题已经完善,我仍然需要帮助!

我有以下表结构:

reports

ID |       time | title | (extra columns)
 1 | 1364762762 |   xxx | ...

具有以下结构的多个object

ID | objectID |       time | title | (extra columns)
 1 |        1 | 1222222222 | ...   | ...
 2 |        2 | 1333333333 | ...   | ...
 3 |        3 | 1444444444 | ...   | ...
 4 |        1 | 1555555555 | ...   | ...

在对象表中,在对象更新中插入具有相同objectID的新版本,以便旧版本仍然可用。例如,请参阅objectID = 1

条目

在报告表格中,插入report但从未更新/编辑过。

我希望能够做到以下几点:

对于reports表中的每个条目,我希望能够在创建report时查询所有对象的状态,就像它们一样。 / p>

例如,让我们看一下ID为1的上面的示例报告。在创建它时(参见time列),objectID 1的当前版本是ID为1的条目(条目ID 4那时不存在)。 ObjectID 2也存在于其当前版本,条目ID为2。

我不确定如何实现这一目标。

我可以使用按时间列选择对象版本的查询:

SELECT *
FROM (
    SELECT *
    FROM   objects
    WHERE  time < [reportTime]
    ORDER BY time DESC
)
GROUP BY objectID

让我们不要谈论这个查询的性能,只是要弄清楚我想做什么。我的问题是时间列的比较。我认为这不是确保我得到正确的对象版本的好方法,因为系统时间可能会因为任何原因而改变 并且时间列会在其中包含错误的数据,这将是导致错误的结果。

另一种方法是什么? 我考虑过不使用时间列,而是使用 GLOBAL 增量值,我知道数据库表中的插入顺序。

1 个答案:

答案 0 :(得分:0)

如果您正在处理对象的新版本,并且您的问题是time列(我假设您使用此列来排序哪个更新);我建议您为版本使用auto-incremental ID列。最终,即使time值对您来说不可靠,ID也将是。因为它总是在增加。如此高的ID,更新的版本。

相关问题