通知用户新记录

时间:2014-04-20 17:24:15

标签: php mysql sql database database-design

我有一个包含下载区域的网站。我想在上传任何新文件时通知用户。

我想到了两种方法。

首先是存储日期&用户上次访问事件并在数据库表中下载页面的时间;因此架构看起来像:

Table `account_page_visits`:
    page_id INT NOT NULL,
    account_id INT NOT NULL,
    last_visited DATETIME NOT NULL;

还有一个下载表和一个事件表。在这些表中,会有一个名为date_added的列,它会存储将记录添加到表中的日期和时间。

从数据库中获取我的链接(存储在navigation表中)时,我会检查每个链接,如果链接是下载或事件,我会计算其下载或事件的数量{ {1}}大于当前用户页面的date_added时间。

这实际上是我目前实施的方法,但我发现了一个问题:

下载和事件页面被拆分为子页面,从数据库返回的下载或事件数量限制为每页20个。当前的通知方法假定,一旦用户访问了事件或下载页面,他们就已经有效地“看到”了所有新的下载或事件,因为last_visited时间现在将大于新的last_visited下载/活动。如果用户只访问下载的第1页然后转到另一个页面,即使他们只看到20次新下载,他们也不会再看到下载通知。

第二种方法解决了这个问题,但似乎很长时间对我说:

我将拥有date_addedaccount_page_visits表,而不是viewed_downloads表。这些将包含事件/下载ID和帐户ID。通过查看viewed_eventsviewed_downloads中是否存在记录,我会获得看不见的下载/事件数量;类似的东西:

viewed_events

当用户在某种SELECT - INSERT IGNORE中访问下载/事件页面时,当选择下载/事件时,记录将被添加到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 ) viewed_downloads

哪种方法会更好?

1 个答案:

答案 0 :(得分:0)

如果我以一种好的方式理解这个问题,那么最好的解决方案就是在ViewsCount上为您的下载表添加新记录,每次用户下载您的项目时都会更新这些记录LastVisted每当您尝试获取此帐户大多数下载文件时,此alos将更新您可以使用简单的select语句获取此帐户的最多下载文件,如果我以一种好的方式理解您的问题,这将是最佳解决方案