Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql+;PHP代表;威尔逊评分区间“;时间引力_Php_Mysql_Ranking_Voting System - Fatal编程技术网

Mysql+;PHP代表;威尔逊评分区间“;时间引力

Mysql+;PHP代表;威尔逊评分区间“;时间引力,php,mysql,ranking,voting-system,Php,Mysql,Ranking,Voting System,我想实现一个网页新闻排名系统 我需要以下方面的指导: 我的方法。对吗?这是疯狂/愚蠢吗 如果正确,请说明其执行情况 有关资料: 我正在使用PHP、MYSQL和代码点火器 用户可以对网页新闻进行上下投票 该新闻将根据其“威尔逊评分区间”进行排名,稍作修改: 时间引力(最新消息可能最先出现) 然而,时间衰减将在48小时后停止(新闻的重力效应将在48小时后相同) 方法 我想通过Mysql做所有事情: 我将时间引力威尔逊分数(TGWS)——在引力函数中获得的分数——存储到news_表中 我

我想实现一个网页新闻排名系统

我需要以下方面的指导:

  • 我的方法。对吗?这是疯狂/愚蠢吗
  • 如果正确,请说明其执行情况
有关资料:

  • 我正在使用PHP、MYSQL和代码点火器
  • 用户可以对网页新闻进行上下投票
  • 该新闻将根据其“威尔逊评分区间”进行排名,稍作修改:
    • 时间引力(最新消息可能最先出现)
    • 然而,时间衰减将在48小时后停止(新闻的重力效应将在48小时后相同)
方法 我想通过Mysql做所有事情:

  • 我将时间引力威尔逊分数(TGWS)——在引力函数中获得的分数——存储到news_表中
  • 我会制造一个触发器。我会重新计算新的投票行的TGW
  • 我会创建一个事件。每隔30分钟,它将更新过去48小时内发布的新闻的TGWS。(48小时后,在投票发布之前,分数不应改变,因此不需要重新计算48小时以上的新闻)
这有意义吗

实施 好啊我知道PHP中的代码(见下文)。 但是如何将Wilson Score代码移植到Mysql?有可能吗?已经在什么地方做了吗? 我已经在Mysql中创建了触发器、函数、事件和过程,但我不知道如何移植这个

谢谢

<?php

class Rating
{
  public static function ratingAverage($positive, $total, $power = '0.05')
  {
    if ($total == 0)
      return 0;

    $z = Rating::pnormaldist(1-$power/2,0,1);
    $p = 1.0 * $positive / $total;
    $s = ($p + $z*$z/(2*$total) - $z * sqrt(($p*(1-$p)+$z*$z/(4*$total))/$total))/(1+$z*$z/$total);
    return $s;
  } 

  public static function pnormaldist($qn)
  {
    $b = array(
      1.570796288, 0.03706987906, -0.8364353589e-3,
      -0.2250947176e-3, 0.6841218299e-5, 0.5824238515e-5,
      -0.104527497e-5, 0.8360937017e-7, -0.3231081277e-8,
      0.3657763036e-10, 0.6936233982e-12);

    if ($qn < 0.0 || 1.0 < $qn)
      return 0.0;

    if ($qn == 0.5)
      return 0.0;

    $w1 = $qn;

    if ($qn > 0.5)
      $w1 = 1.0 - $w1;

    $w3 = - log(4.0 * $w1 * (1.0 - $w1));
    $w1 = $b[0];

    for ($i = 1;$i <= 10; $i++)
      $w1 += $b[$i] * pow($w3,$i);

    if ($qn > 0.5)
      return sqrt($w1 * $w3);

    return - sqrt($w1 * $w3);
  }

    public static function gravityRating($positive, $total, $time, $power = '0.05')
  {
    if ($total == 0)
      return 0;
    return (Rating::ratingAverage($positive, $total, $power) / pow($time,0.5)); //para reducir el valor del tiempo solo dividir time por algo.
  }
}

我认为你的问题没有任何意义。事实上,没有时间引力这样的东西,如果你只是想展示最新的新闻,你可以对新闻进行分类。同样,威尔逊间隔与时间无关,因此每30分钟计算一次威尔逊间隔不会改变任何事情。

我想在考虑时间和投票的情况下订购。例如reddit。我的错误是,我想存储的不是WS,而是WS+重力效应(在重力梯度函数上计算的分数),它会随着时间而变化。@JuanCarlos:如果你想对两者进行排序,你必须定义一个函数(x,y)=z。如果你只是给平均评分加上一个线性值,这似乎不起作用。当你的函数有用时,你可以保留它。否则,请阅读我的答案。我目前正在研究用时间变量获得类似的威尔逊分数。有一篇非常有趣的文章,关于这一点,随着时间的推移,他们的分数呈对数递减。不幸的是,我不知道如何实现这一点。