2010-07-06 35 views
8

我正在研究與上次用戶上次見面時類似邏輯的應用程序。我遇到了一個概念性問題,我希望你們中的一些人能夠幫助我。如何在堆棧溢出時編寫「上次查看」邏輯

當登錄用戶點擊該網站,一個新的會話創建的所有活動被記錄在ActivityLog數據庫中的表

,我更新活動日誌與用戶名和一些非常通用的信息。同樣的事情發生時,他們創建一個新的記錄,更新他們的個人資料等。

我遇到的問題是這樣的。

如果我使用最近的活動項目,然後導航到我的個人帳戶頁面,「Last Seen」顯示爲1秒前,因爲我只是在會話開始時擊中了分貝......這不好,因爲我希望看到我在那裏「最後」,而不是當我「現在」在那裏時。但是,如果我使用Skip(1).Take(1)獲取數據庫中的第二條記錄,那麼當其他人查看我的配置文件,而我可能已經「剛剛」登錄...他們會在一週前看到我說的而不是今天。

你會用什麼樣的邏輯來獲得你的蛋糕並且吃它呢?

我正在使用ASP.NET MVC2和Linq到SQL,但我認爲這個問題是更多的語言不可知論者。

回答

3

這聽起來像你可以顯示當前用戶的第二個最新記錄,併爲所有其他用戶顯示最近的記錄。

+0

將'current'和'last'放在用戶表中以及保留一個活動日誌會更簡單和更少的系統開銷?這聽起來像更多的工作,因爲我必須維護兩個記錄位置。我使用活動日誌對於其他的東西,所以我不想刪除它 – 2010-07-06 18:20:50

+0

也,因爲我正在使用LINQ to SQL與IQueryable存儲庫層,我不認爲從活動日誌中檢索數據將是即使日誌變大,系統密集程度也會太高。搜索基本上還有一個OrderBy和一個Select Top 1(或Second) – 2010-07-06 18:22:29

+0

也......還有......只是提到,我認爲這可能是迄今爲止最簡單的答案......關於爲當前用戶顯示SECOND和爲所有o顯示FIRST的部分用戶。 – 2010-07-06 18:26:54

2

一個地方看是在源代碼OSQA(開放式源Q &系統) -

http://www.osqa.net/

是的,它看起來很像StackOverflow上(至少可以這樣說)。

3

我會做什麼(只是爲了避免一個大的邏輯循環)將添加兩個字段。 current_seenlast_seen。在登錄時,將current_seen移動到last_seen,並將current_seen設置爲當前時間戳。然後顯示last_seen作爲他們的「上次在XX/XX/XXX上看到的內容」。

+0

我使用OpenID並實際上保持用戶登錄,直到他們註銷。這意味着每次創建新的會話時,都需要進行此過程(或者在網站上執行其他活動時)。 – 2010-07-06 18:00:31

+0

此外,這種思考方法與上面提到的「跳過(1).Take(1)」幾乎完全相同(如果我在任何給定時間只顯示「最後看到」部分 – 2010-07-06 18:01:23