我有一个包含下载区域的网站。我想在上传任何新文件时通知用户。
我想到了两种方法。
首先是存储日期&用户上次访问事件并在数据库表中下载页面的时间;因此架构看起来像:
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_added
和account_page_visits
表,而不是viewed_downloads
表。这些将包含事件/下载ID和帐户ID。通过查看viewed_events
或viewed_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
表
哪种方法会更好?
答案 0 :(得分:0)
如果我以一种好的方式理解这个问题,那么最好的解决方案就是在ViewsCount
上为您的下载表添加新记录,每次用户下载您的项目时都会更新这些记录LastVisted
每当您尝试获取此帐户大多数下载文件时,此alos将更新您可以使用简单的select语句获取此帐户的最多下载文件,如果我以一种好的方式理解您的问题,这将是最佳解决方案