2012-02-11 15 views
-1

私はいくつかのものを共有するアプリケーションを構築しています...ユーザーレートを計算するためのベストプラクティス

各オブジェクトの評価が1..5スタートしています。私は毎星ごとの料金の数を保持しているので、平均レートを計算することができます。

Objごとに私には:平均レートと合計レートがあります。 私はトップ10のObjを取得する必要があります - AvgRate + TotalRate(トップ10としてこれらの値を持つ人)を使って行うことができます。

私は、サーバーでは、このようなSQLテーブルを持つようにしたい: OBJID(インデックス)、totalRate、AvgRate ... 可能な場合は、それが最初の10としてTOP10を得ることができるので、このテーブルがソート持っていますか? 私は望む計算でトップ10をどのようにクエリできますか?

また、ユーザーあたりトップ10を取得する必要があります。だから私はすべてのObjを共有しているので、これらのObjのすべてのレートを持つことができるユーザーごとに - 前に述べたObjごとのすべての情報。

ユーザーレートの計算方法と、トップ10の取得方法を知る必要があります。

アイデア?

+0

理解できますが、昇順でソートして結果を10に制限します –

答えて

2

その後編集:この答えを書くときに申し訳ありませんが、つもり他人のために、まだそれを残して、あなたの質問を理解していなかった...


TotalRateのためのあなたの式は何ですか? 「AvgRate + TotalRateを使用してそれを行うことができます」という意味はどういう意味ですか?なぜTotalRateに平均を加算していますか?

ベストプラクティスは、合計/平均を常に段階的に計算することです。 私はこのようなOBJにモデル化するであろう: - ユーザへの外部キー

  • D:

    • レートの合計数は、
    • Cの平均値(B/Aフロート)を受信点の
    • B総和を受信しました(Objの著者/所有者)

    オブジェクトがレートXを受け取ると、A = A + 1、B = B + X、C = B/Aを再計算します。 同様に、集計合計/平均を事前に計算します。したがって、Objがユーザに属している場合、ユーザモデル/テーブルと同じフィールド(A、B、C)を作成し、ObjがレートXを受け取ると、ユーザD(Objの所有者)のA、B、C値も更新する。次に、上位10人のユーザーを選択すると、Objテーブル(巨大になる可能性があります)に参加する必要はありません。ユーザーを選択するのはBまたはC列で降順で10人限定です。

  • +0

    これは簡単な方法ですが、Objが5のレートを1つ(例えば)した場合、それはトップ10になりますが、1レートしか得られません.... Objが4人で1000人のユーザーで評価された場合トップ10になる(例) – user1136875

    +0

    合計金額は1 * numOfRatesFor1Star + ... + 5 * numOfRatesFor5Star ...前のコメントで述べたように - トップ10を取得する必要がある平均レートだけでなく、それを評価した人の数といくつかの計算を使用しても – user1136875

    +1

    今、私はそれを得る、あなたは平均レートとレートの数に基づいて人気の数式を求めている。私はあなたが "人気のalgorythms"を探す必要があると思います。ほとんどの場合、最新のレートの頻度を数えます。「古い」投稿が埋められるようにします。 –

    関連する問題