MySQL SELECT概率喜欢不喜欢的系统

时间:2013-05-31 02:35:49

标签: php mysql algorithm probability

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

我希望评论随意排列;但是,我希望有机会根据不喜欢的比例来增加。例如:

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

我正在使用PHP和MySQL。我需要帮助为此创建某种算法。我知道这很有挑战性,但如果你能想到某种类型的MySQL查询,那就太棒了。 :d

1 个答案:

答案 0 :(得分:2)

我假设您有一个评论表,其中包含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不支持窗口/分析功能,因此最容易使用临时表和多个查询来实现它们。但是,这种方法只需要一个查询而不需要临时表。