我有兴趣使用这个排名类,根据Evan Miller的一篇文章来对我拥有的有赞成票和反对票的表格进行排名。我有一个非常类似于 Stack Overflow 上/下投票系统的系统,用于我正在开发的活动网站,通过使用这个排名类,我觉得结果会更准确。我的问题是如何按功能“热度”订购?
private function _hotness($upvotes = 0, $downvotes = 0, $posted = 0) {
$s = $this->_score($upvotes, $downvotes);
$order = log(max(abs($s), 1), 10);
if($s > 0) {
$sign = 1;
} elseif($s < 0) {
$sign = -1;
} else {
$sign = 0;
}
$seconds = $posted - 1134028003;
return round($order + (($sign * $seconds)/45000), 7);
}
我想每次用户投票时,我都可以在我的表中有一列重新计算新投票的热度数据,并在主页上按该列排序。但我有兴趣在结合上述功能时更即时地执行此操作,我不确定这是否可能。
来自 Evan Miller,他使用:
SELECT widget_id, ((positive + 1.9208) / (positive + negative) -
1.96 * SQRT((positive * negative) / (positive + negative) + 0.9604) /
(positive + negative)) / (1 + 3.8416 / (positive + negative))
AS ci_lower_bound FROM widgets WHERE positive + negative > 0
ORDER BY ci_lower_bound DESC;
但我宁愿不在 sql 中进行此计算,因为如果我在多个页面上使用此代码等,我觉得这很混乱且难以更改。