【发布时间】:2014-04-20 17:24:14
【问题描述】:
我有一个包含下载区域的网站。我想在任何新文件上传到此部分时通知用户。
我想了两种方法来做到这一点。
第一个是将用户上次访问事件和下载页面的日期和时间存储在数据库表中;所以架构看起来像:
Table `account_page_visits`:
page_id INT NOT NULL,
account_id INT NOT NULL,
last_visited DATETIME NOT NULL;
还有一个下载表和一个事件表。在这些表中,会有一个名为 date_added 的列,用于存储记录添加到表中的日期和时间。
在从数据库中获取我的链接(存储在navigation 表中)时,我会检查每个链接,如果链接是下载或事件,我会计算他们的date_added 所在的下载或事件的数量大于当前用户页面的last_visited时间。
这其实是我目前实现的方法,但是我发现了一个问题:
下载和事件页面被分成子页面,因此从数据库返回的下载或事件数量限制为每页 20 个。当前的通知方法假定一旦用户访问了事件或下载页面,他们已经有效地“看到”了所有新的下载或事件,因为last_visited 时间现在将大于新下载/事件的date_added。如果用户只访问下载的第 1 页,然后转到另一个页面,即使他们只看到了 20 次新下载,他们也不会再看到任何下载通知。
第二种方法解决了这个问题,但对我来说似乎很啰嗦:
我将使用viewed_downloads 和viewed_events 表而不是account_page_visits 表。这些将包含事件/下载 ID 和帐户 ID。通过查看viewed_downloads 或viewed_events 中是否存在记录,我将获得未见下载/事件的数量;类似:
SELECT COUNT(1) FROM `downloads` d
WHERE NOT EXISTS (
SELECT 1 FROM `viewed_downloads` vd
WHERE vd.download_id = d.id
AND vd.account_id = userAccountId
)
当用户以某种 SELECT - INSERT IGNORE 访问下载/事件页面时选择下载/事件时,记录将添加到 viewed_downloads 和 viewed_events 表中
哪种方法更好?
【问题讨论】:
-
我无法理解您想要什么,请简要说明您想在新文件上传到您的下载区域时通知用户吗?或者统计有多少人下载了您的文件?
-
抱歉,这是为了通知用户一个新文件已上传并可供他们下载
标签: php mysql sql database database-design