2013-03-31 90 views
0

更新:問題精緻,我仍然需要幫助!如何獲取數據庫條目的正確「版本」?

我有以下表結構:

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 | ... | ... 

在對象表中,上對象用相同的對象更新新版本ID是ins這些舊版本仍然可用。例如,請參閱objectID = 1

的條目在報告表中插入了report,但從未更新/編輯。

我希望能夠做的是以下幾點:

對於我reports表中的每個條目,我希望能夠查詢所有對象的狀態,像他們,當report已創建。

例如,讓我們看一下上面帶有ID 1的示例報告。當它創建時(請參閱time列),對象ID 1的當前版本是ID爲1的條目(條目ID 4不存在於那點)。 ObjectID 2也存在與它的條目ID爲2的當前版本。

我不知道如何實現此目的。

我可以使用,選擇由時間列的對象版本的查詢:

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

讓不談論這個查詢的性能,它只是要明確什麼我想做的事情。我的問題是時間欄的比較。我認爲這是確保我得到了正確的對象版本,因爲系統時間可以改變「以任何理由」和時間列,然後會在它錯誤的數據,這將導致錯誤的結果沒有什麼好辦法。

什麼是另一種方式來做到這一點? 我想過沒有使用時間列這一點,而是一個全球增量價值,我知道整個數據庫表的插入順序。

+0

有實現這幾個方法,你可以用一些架構信息(包括索引)編輯你的問題,例如數據甚至幾行 - 這將有助於有人建議做 – Steve

+0

我依然是最好的方法建立模式,每個表的列數不同。我也可以根據需要創建儘可能多的索引;) – schlimpf

回答

0

如果您interting對象的新版本,你的問題是time列(我假設你正在使用此列進行排序哪一個是新的);我建議你使用auto-incremental ID列的版本。最終,即使time值對您不可靠,ID也會是。因爲它始終在增加。所以更高的ID,更新的版本。

+0

我也有一個表的自動增量ID – schlimpf

相關問題