我们有一个包含位置数据库的网站。对于每个地方,我们的用户都可以采取我们记录的以下操作之一:

  1. 查看 - 查看它的个人资料
  2. 评分 - 以1-5星的比例对其进行评分
  3. 评论 - 评论
  4. 完成 - 标记他们去过那里
  5. 愿望清单 - 标志着他们想去那里
  6. 最喜欢的 - 标记这是他们的最爱之一

在我们的数据库表中,每个地方都包含上述每个动作的次数以及用户给出的平均评分。

  • 视图
  • 评分
  • avg_rating
  • 完全的
  • 愿望清单
  • 最喜欢的

我们想要做的是使用上述信息生成顶级位置的列表。理想情况下,我们希望能够使用相对简单的SQL查询来生成此列表,而无需进行任何腿部工作来计算其他字段或堆栈等级彼此相对。话虽这么说,因为我们只有大约50,000个地方,我们可以经营每晚的Cron工作来计算一些领域,例如不同类别的排名,如果这会在我们的最高位置的整体结果中产生有意义的影响。

如果您能为我们如何考虑到顶部的最佳地点,我们应该更加重量,并且考虑到这些信息,我将不胜感激,并建议您的MySQL查询需要看起来像什么选择前十名。

要注意的一件事是,目前我们不太关心一个地方流行的新近度 - 这意味着查看汇总信息是可以的,并且最新的数据不需要更严重。

事先感谢您的帮助和建议!

有帮助吗?

解决方案

最喜欢的确切公式需要来自您,我们将其称为f(x)。
对于实际实现,我将添加一个我将计算的Pucority_score字段,就像您在每行使用F(X)的夜间CRON作业中所说的那样。

然后,这只是一种“从表顺序中选择位置名称butonity_score desc”的情况。

好的 - 让我们给它一个stab punculity_score =(falese * 3 +完成 * 2 +愿望清单) *额定 * view / avg_views_of_all_all_profiles

其他提示

我对如何权衡事物没有意见。

也就是说,为什么不只是在位置表中添加一个受欢迎的列呢?突然之间,您的SQL查询非常简单。

当然,棘手的部分是弄清楚如何以及何时更新该值。但是,由于您要保存所有活动数据,因此您始终可以从日志条目中再生受欢迎的值。

这样,您会获得“最受欢迎”位置的快速查询,如果您想更改计算受欢迎程度的方式,则可以随意这样做。

如果您聪明,则可以设计一个足够简单的公式,以便可以实时跟踪受欢迎程度。例如,如果我们只关心平均评分,则可以使用三个变量来修改平均评分:当前的平均额定值,对象额定值的次数以及新的评分值。

当然,当您开始混合几次对象被查看,审查,喜欢等的次数时,事情变得越来越复杂...但是您可能会发现您可以设计一种计算上足够便宜的方法,以便您可以更新整体流行。重视几乎每个动作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top