2010-07-06 96 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