【问题标题】:MySQL SELECT Probability like-dislike systemMySQL SELECT 概率喜欢不喜欢系统
【发布时间】:2013-05-26 18:45:20
【问题描述】:

我正在为我的博客网站创建一个 YouTube 评论风格(喜欢-不喜欢)PHP 应用程序。

我希望 cmets 随机排列;但是,我希望根据喜欢与不喜欢的比率来增加机会。例如:

5 次喜欢和 1 次不喜欢的评论比 4 次喜欢和 2 次不喜欢的评论更有可能被选中,因为 5/1 高于 4/2。因此,喜欢-不喜欢的比例与在 cmets 部分显示的机会成正比。

我正在使用 PHP 和 MySQL。我需要帮助来为此创建某种算法。我知道这很有挑战性,但是如果您能为此想到某种 MySQL 查询,那就太好了。 :D

【问题讨论】:

标签: php mysql algorithm probability


【解决方案1】:

假设您有一个 cmets 表,其中包含 NumLikesNumDislikes 等列。

您可以采取的一种简单方法是按比率(或按降序的概率)对行进行排序,并在选择较低的行而不是较高的行时有所偏差。

下面随机选择一行,然后随机选择比该行更好的一行。这会使选择过程偏向更好的行:

select *
from comments c cross join
     (select c.*
      from comments c
      order by rand() desc
      limit 1
     ) threshhold
where c.likes / (c.likes + c.dislikes) >= threshold.likes / (threshold.likes + threshold.dislikes)
order by rand()
limit 1

还有更复杂的技术。因为 MySQL 不支持窗口/分析函数,所以它们最容易用临时表和多个查询来实现。然而,这种方法只需要一个查询并且不需要临时表。

【讨论】:

  • 我怎样才能做到这一点:evanmiller.org/how-not-to-sort-by-average-rating.html 我想使用威尔逊公式,所以它更准确。谢谢:D
  • @MicoAbrina:滚动到文章底部。有一个示例 SQL 查询。
  • @MicoAbrina 。 . .我常用的方法是计算比率,然后使用“pq/n 的平方根”公式减去一个标准误差。也就是说,对该比率进行悲观的统计估计。在你的情况下,我猜尾巴很长,因为帖子只有一个喜欢或不喜欢。当你的尾巴很长时,从最简单的方法开始,只在必要时对其进行改进。
  • 是的!我注意到 evanmiller.org 中的 SQL 查询。 :D 但是,我如何将它与代码的偏差系统混合在一起?
  • @MicoAbrina 。 . .您将在 both 情况下(这会影响where 子句的两边)使用下限估计值,而不是比率。我倾向于追求一个标准的误差差异。这篇文章提出了一个 95% 的置信度下限。我不能强烈反对另一个,因为它们都是启发式的。
猜你喜欢
  • 1970-01-01
  • 2018-05-27
  • 2022-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-06
  • 2012-09-15
相关资源
最近更新 更多