gpt4 book ai didi

php - 我如何创建一个 mysql_query 来提取使用贝叶斯平均值排名的项目?

转载 作者:行者123 更新时间:2023-11-29 00:55:15 26 4
gpt4 key购买 nike

给定一个包含以下字段的数据库表:

  • total_votes:投给这个项目/行的总票数
  • average_value:平均投票值(即 3.6,5 为最大值)
  • total_value:所有投票值的总和(即 3 票 4 将产生 12)

我只是简单地使用 SELECT 来抓取行,并使用 ORDER BY 按它们的平均值对它们进行排序,但后来我遇到了一个问题,一个有 10 票的好行平均 4.9 被一个只有 1 的全新行超越5 票超过它。

经过一些研究,我发现最流行的对评级项目进行排序的方法是使用贝叶斯平均值。

br = ( (avg_num_votes * avg_rating) + (this_num_votes * this_rating) ) / (avg_num_votes + this_num_votes)

但是,我很难创建一个查询来提取这些行并使用这个平均值对它们进行排序,因为我是创建任何高级 mySQL 查询方面的新手。

我要找的是:

$results = mysql_query("INSERT ANSWER HERE");

INSERT ANSWER HERE 是您提供给我的答案,$results 提供按贝叶斯平均值排序的这些项目。

有关贝叶斯平均的更多信息,我查看了:http://www.thebroth.com/blog/118/bayesian-rating

最佳答案

一种简单的方法是使用两个查询。也许这会成功

查询#1

SELECT
AVG(total_votes) AS avg_num_votes,
AVG(average_value) AS avg_rating
FROM
MyThings
WHERE
total_votes > 0

这应该为您提供所有项目的 avg_num_votes(至少有一票),以及所有项目的 avg_rating(对于至少一票的项目)。

有了这些值,构建查询 #2 并使用 ORDER BY:

查询#2

SELECT
thing_id
thing_name
FROM
MyThings
ORDER BY
(($avg_num_votes * $avg_rating) + (total_votes * average_value)) / ($avg_num_votes + total_votes)

在提交此查询之前,将 $avg_num_votes$avg_rating 替换为查询 #1 的结果。

警告:还没有测试过这个,我也不熟悉贝叶斯排名。

希望对您有所帮助!

关于php - 我如何创建一个 mysql_query 来提取使用贝叶斯平均值排名的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6406616/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com