8

Evan Millerの記事に基づいて、このランキング クラスを使用して、賛成票と反対票のあるテーブルをランク付けすることに興味があります。私が取り組んでいるイベント サイトのスタック オーバーフローのアップ/ダウン投票システムに非常によく似たシステムがあり、このランキング クラスを使用することで、結果がより正確になるように感じます。私の質問は、機能「辛さ」でどのように注文するのですか?

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でこの計算を行うことはしません。

4

3 に答える 3

0

あなたのDBとスキーマでそれが可能かどうかはわかりませんが、カスタムソート用にUDFを書くことを検討していますか?

stackoverflow からの投稿では、ここでこれを行う方法について説明しています。

于 2013-06-19T04:27:13.753 に答える