database-design - 如何跟踪用户每天访问该网站 X 天?

标签 database-design methodology

Stack Overflow 上有一个新徽章。 “woot”徽章颁发给在 30 天内每天访问该网站的用户。您如何实现这样的功能?您如何以最简单的方式跟踪用户在 X 天内每天访问该站点的情况?

我想有两个字段 - 一个用于上次登录的时间戳,另一个用于计算用户连续访问该站点的天数。逻辑是先将计数器设置为1,同时存储登录时间。在下次登录时,检查自上次登录以来是否不超过一天,并增加计数器,或将其重新设置为 1。然后将时间戳字段更新为当前日期。

你能做得更简单吗?

最佳答案

您确实需要一个 cookie,因为人们可能不会每天都登录——例如,因为他们自动登录了 2 周,或者因为他们在您的网站上连续 50 小时不 sleep 和不吃午餐地做事: ) 您可能实际上想要计算用户访问站点的时间。

现在,理论上可以记录每次访问并执行数据库查询,正如上面所建议的,但您可能会认为(就像我一样)它在实用性和隐私+简单性之间取得了错误的平衡。

您指定的算法明显存在缺陷:由于您只存储整数天数,您会错过每 12 小时登录和退出一次的用户(您的算法会将天数保持为 1)

这是我发现最干净的解决方案,每个用户有两个日期字段,在一种不言自明的非面向对象 Python 中:

# user.beginStreak----user.lastStreak is the last interval when 
# user accessed the site continuously without breaks for more than 25h 

def onRegister (user):
    ...
    user.beginStreak = user.endStreak = time() # current time in seconds 
    ...

def onAccess (user): 
    ...
    if user.endStreak + 25*60*60 < time():
        user.beginStreak = time()
    user.endStreak = time()
    user.wootBadge = ( user.endStreak-user.beginStreak > 30*24*60*60 )
    ...

(请原谅我的 Pythonic 技能,我是一个学术和第一次网站用户)

你不能用一个变量来完成这项任务。我相信有人可以写出清晰的论据来证明这一事实。

关于database-design - 如何跟踪用户每天访问该网站 X 天?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/932610/

相关文章:

sql - 如何限制列中的 JSON/JSONB 值完全不同?

agile - 务实就是敏捷吗?

scrum - 有人对组织/管理个人开发工作有什么建议吗?

java - 关于 Java 的方法论和正确实践

数据库关系 : shall I include a table in between?

node.js - NodeJS如何只在工作时间执行一个功能?

database-design - 创建索引,还是添加到主键并创建新表?

数据库约束与应用程序级别验证

methodology - 提出一种 Web 开发方法

使用远程 shell 访问进行 PHP 调试