如何在MySQL中存储最近的使用频率

Ada*_*dam 6 mysql sql database

我正在研究应用程序的Product Catalog模块Invoicing.

当用户创建新发票时,该product name字段应为自动填充字段,该字段显示产品目录中最近使用的产品.

如何在数据库中存储此"使用新近度/频率"?

我正在考虑添加一个新的字段recency,1每次使用该产品时都会增加,而1/(count of all products)当使用其他产品时,该字段会减少.然后使用此recency字段进行排序,但在我看来这不是最好的解决方案.

你能帮我解决一下这类问题的最佳做法吗?

小智 6

新近度计算的解决方案:

在products表中创建一个新列,last_used_on例如命名.它的数据类型应该是TIMESTAMP(Unix时代的MySQL表示).

好处:

  • 时间戳包含日期和时间部分.
  • 它可以对日期和时间进行非常精确的计算和比较.
  • 它允许您以您选择的日期时间格式格式化保存的值.
  • 您可以将任何日期时间格式转换为时间戳.
  • 关于自动填充字段,它允许您根据需要过滤产品列表.例如,显示自[date-time]以来使用的所有产品.或者获取[date-time-1]和[date-time-2]之间使用的所有产品 .或者仅在星期一,下午1:37:12,过去两年,两个月和三天(因此灵活的时间戳)使用产品.

资源:

使用率计算的解决方案:

嗯,实际上,你不是在谈论频率计算,而是谈论一个速率 - 尽管人们可以说频率也是速率.

频率意味着使用时间作为参考单位,并以赫兹(Hz = [1 /秒])测量.例如,假设您要查询去年产品的使用次数.

另一方面,比率是两个相关单位之间的比较.例如汇率美元/欧元 - 它们都是货币.如果比较发生在相同类型的两个术语之间,则结果是没有测量​​单位的数字:百分比.喜欢:50个苹果/ 273个苹果= 0.1832 = 18.32%

这就是说,我想你想计算出使用率:数量用途的产品的与数量关系惯例的所有产品.就像产品一样:usage rate of the product = 17 usages of the product / 112 total usages = 0.1517... = 15.17%.在自动填充中,您希望显示使用率大于给定百分比的产品(例如9%).

这很容易实现.在该products表中添加一列usages型的int或bigint与一个简单的产物每次使用时增加它的值.然后,当您想要获取最常用的产品时,只需应用此sql语句中的过滤器:

SELECT
    id, 
    name, 
    (usages*100) / (SELECT sum(usages) as total_usages FROM products) as usage_rate
FROM products 
GROUP BY id
HAVING usage_rate > 9
ORDER BY usage_rate DESC;
Run Code Online (Sandbox Code Playgroud)

这是一个小案例:

研究案例

最后,新近度,频率和速率是三个不同的东西.

祝好运.