【问题标题】:Notifying users of new records通知用户新记录
【发布时间】: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_downloadsviewed_events 表而不是account_page_visits 表。这些将包含事件/下载 ID 和帐户 ID。通过查看viewed_downloadsviewed_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_downloadsviewed_events 表中

哪种方法更好?

【问题讨论】:

  • 我无法理解您想要什么,请简要说明您想在新文件上传到您的下载区域时通知用户吗?或者统计有多少人下载了您的文件?
  • 抱歉,这是为了通知用户一个新文件已上传并可供他们下载

标签: php mysql sql database database-design


【解决方案1】:

如果我很好地理解了这个问题,那么最好的解决方案是在ViewsCount 上向您的下载表添加新记录,每次用户下载您的项目和LastVisted 时都会更新该记录,这个alos 将每次尝试获取此帐户下载次数最多的文件时都会更新您可以使用简单的选择语句来获取此帐户的最多下载文件,如果我能很好地理解您的问题,这将是最好的解决方案

【讨论】:

  • 感谢您的回答。抱歉,我的问题的措辞一定不正确。这是为了通知用户已经添加了新的下载或事件供他们查看或下载,类似于 Facebook 通知用户有人在他们所属的群组中发帖的方式
  • 实际上你不需要在触发器上创建或者你需要做的就是当你在同一步骤中上传文件时你需要在上传完成时通知用户然后在同一个事务中发送通知向用户告知新文件已上传。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多