作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
给定一个包含以下字段的数据库表:
我只是简单地使用 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/
我是一名优秀的程序员,十分优秀!