在我的应用的主页中,我尝试实施类似Chrome浏览器的“访问量最大的网站”。 Safari有他们的主页。主要不同之处在于应用程序将显示来自数据库(人员,组织,订单,发票等)的对象,而不是网站。
它应该像自动书签一样工作。
DB中已存在“最近查看”表(InstanceId,UserId,LastVisitDate)。
我可以使用(NumberOfVisits)属性扩展它,但这不允许我对旧的更近期访问进行加权。
我正在研究的一个想法是根据LastVisitDate对NumberOfVisits进行加权。 当用户再次访问该实例时,我会在添加新访问之前减轻现有的NumberOfVisits。
之前有没有人实现过这样的系统? 你知道Safari& Chrome是否在主页上执行此操作?
答案 0 :(得分:2)
答案 1 :(得分:1)
普通老愚蠢的“上个月的访问次数”怎么样?
我还会考虑用户在一个特定实体上停留的持续时间。例如,在上个月他每次工作半小时的情况下,用户访问过的实体重量增加了3倍,而不是他访问过的实体10次,但只开了15-20秒。< / p>
答案 2 :(得分:1)
SELECT
InstanceId,
UserId,
COUNT(InstanceId) AS [Count]
GROUP BY InstanceId, UserId
HAVING Date >= DATEADD(DAY, -7, GETDATE()) -- This will give the most visited instances in the last week. In the same way you can get the most visited instances in a day, month, year, etc.
ORDER BY [Count] DESC
答案 3 :(得分:1)
“最常见的”通常与过去几周/几天/年相关。所以你需要记住一个“要求”。所以想象一下,你想拥有最近30天访问量最大的网站,一种方法就是拥有这样的表格结构
<强>编号强>
<强>的PageId 强>
<强> LastFlush 强>
<强> Visists 强>
其中“LastFlush”-colum是一个DateTime,告诉您上次刷新的时间。但是,如果您使用此结构,则会出现另一个问题,“30天后”您回到0并且没有要显示的MostVisistedSites。
另一个方面是将每个visist存储在一行中,例如
<强>编号强>
<强>的PageId 强>
<强> Visisted 强>
然而,这会在您的表格中填满更多行,但它会让您更好地了解您的网站,当然,您可以删除所有过去30天的访问者,如果您愿意,只需关注新访问者。
答案 4 :(得分:0)
以下是实施的解决方案: 在我的LastView表中添加了两列,现在是:
说明
我们有这样的方式:
只有6个(5个实数+ 1个计算的)列,没有触发器,UDF,SP和快速查询。
答案 5 :(得分:0)
您可以使用漏桶抽象。
存储访问次数以及上次更新的日期。更新时,请设置访问次数为
(旧号码 - (自上次更新后的天数*老化因子)+ 1)
查询时,始终使用
进行标准化
(访问次数 - (自上次更新以来的天数*因子))
然后你可以按照结果排序。
老化因素越大,数字下降的速度就越快。
您还可以使用“自上次更新以来的天数”的方块(或多维数据集),以便在上次访问时使用的时间越长,衰减速度越快。