php - MySQL SELECT 概率喜恶系统

标签 php mysql algorithm probability

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

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

5 个赞和 1 个不喜欢的评论比 4 个赞和 2 个不喜欢的评论更有可能被选中,因为 5/1 高于 4/2。因此,好恶率与在评论区被展示的几率成正比。

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

最佳答案

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

关于php - MySQL SELECT 概率喜恶系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16848924/

相关文章:

php - 如何在PHP中获取有关apc信息的图表?

php - 验证更新排除某些字段

mysql - 多个多对多关系SQL查询

algorithm - 大 O 和时间复杂度

c# - C#.NET 中有没有办法将字符串分解为固定长度的子字符串?

algorithm - 类似 iPod 的 shuffle 算法的高效实现?

php - 文档根目录外的 CMS 安装适用于所有域

php - 在 Laravel 中搜索关系和日期

mysql - 过去 6 个月每周结束时的用户总数

mysql - gem 安装 mysql ... 错误