0

RDBMS(ほとんどの場合MySQLまたはPostgresql)には、投票を計算するときに使用する3つのテーブルがあります。1つ目は、ユーザーがさまざまなレベルのプル(重み)を持つユーザーテーブル、2つ目はアイテムへの投票を記録するテーブル、3つ目はアイテムテーブル自体です。

アイデアは、モデレーター、またはより長く存在しているユーザーは、票を投じるときに、より多くの「重み」を持つべきであるということです。

USER {
    id,
    weight int,
}

VOTE {
    vote int,
    user_id,
    item_id,
}

ITEM {
    id
}

投票数に加えて、ユーザーの投票の重みに基づいてアイテムの投票を計算したいと思います。したがって、ユーザー100と101の両方の重みが1で、スコアが「3」に投票し、重みが10のユーザー102がやって来て「5」に投票した場合、このユーザー102が投じた投票により多くの値を割り当てます。

おそらく、投票を分割するために使用されるすべてのユーザーの合計ユーザーウェイトのような単純なものです。

(user:weight * vote) / sum(user:weight))

おそらく、システム内で最も重みのあるユーザーのパワーを曲線化するために、他の式を使用する必要があります。

ユーザーの力などの3番目の変数を考慮して投票を計算するにはどうすればよいですか?

その母校の場合、どのように体重を計算する必要がありますか?おそらく、すべてのユーザーの合計の重みを合計し、ユーザーの総数で割って、ユーザーに1〜100の重みを与えるために使用できる平均の重みを求めて、作業を容易にすることができます。

4

1 に答える 1

2

集計で算術演算を実行できます。

select v.item_id,
       (case when sum(u.weight) > 0 then sum(u.weight * v.vote) / sum(u.weight) end) as weightedVote
from vote v join
     user u
     on v.user_id = u.id
group by v.item_id

重みの計算方法は別の問題です。そのクエリは、それらの使用方法を示しています。

于 2012-12-13T19:39:11.680 に答える