1

ウェブページのニュースのランキングシステムを実装したいのですが。

そして、私は次のことについてのガイダンスが必要です:

  • 私のアプローチ。それが正しいか?それはクレイジー/バカですか?
  • 正しければ、その実装について。

関連情報:

  • 私はPHP、MYSQLとCodeigniterを使用しています。
  • ユーザーは、Webページのニュースをup_voteおよびdown_voteできます。
  • ニュースは、わずかな変更を加えた「ウィルソンスコア間隔」によってランク付けされます。
    • 時間の重力(最新のニュースが最初に表示される可能性があります)。
    • ただし、時間の減衰は48時間後に停止します(ニュースの重力効果は48時間後も同じになります)。

アプローチ Mysqlを介してすべてを実行したい:

  • 時間重力ウィルソンスコア(TGWS)(gravityRating関数で取得されたもの)をnews_tableに保存します。
  • トリガーを作成します。賛成/反対の投票が行われている新しい行のTGWSだけを再計算します。
  • イベントを作成します。30分ごとに、過去48時間に発行されたニュースのTGWSを更新します。(48時間後、投票が発行されるまでスコアは変更されないため、48時間より古いニュースを再計算する必要はありません)。

それは意味がありますか?

実装 OK。私はPHPのコードを知っています(以下を参照)。しかし、Wilsonスコアコードを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.
  }
}
4

1 に答える 1

0

あなたの質問は意味がないと思います。実際には、時間の重力のようなものはありません。また、最新のニュースを表示したいだけの場合は、ニュースを並べ替えることができます。また、ウィルソンインターバルは時間とは関係がないため、30分ごとにウィルソンインターバルを計算しても何も変わりません。

于 2012-02-28T09:28:44.877 に答える