4

場所のデータベースを含む Web サイトがあります。各場所で、ユーザーは次のいずれかのアクションを記録できます。

  1. VIEW - プロフィールを見る
  2. 評価 - 星 1 ~ 5 段階で評価してください
  3. REVIEW - レビューする
  4. COMPLETED - 彼らがそこにいたことをマークします
  5. WISH LIST - 彼らがそこに行きたいことをマークします
  6. FAVORITE - お気に入りの 1 つであることをマークします。

場所のデータベース テーブルには、各場所に、上記の各アクションが実行された回数のカウントと、ユーザーによる平均評価が含まれています。

  • ビュー
  • 評価
  • avg_rating
  • 完了
  • ウィッシュリスト
  • お気に入り

私たちができるようにしたいのは、上記の情報を使用して上位の場所のリストを生成することです。理想的には、比較的単純な SQL クエリを使用してこのリストを生成できるようにする必要があります。追加のフィールドを計算したり、順位を互いに比較したりするための面倒な作業は必要ありません。そうは言っても、約 50,000 の場所しかないため、夜間の cron ジョブを実行して、上位の場所の全体的な結果に有意な差が生じる場合は、さまざまなカテゴリのランキングなどのフィールドを計算できます。

最良の場所を一番上にバブリングすることについてどのように考えるべきか、どの基準をより重視するべきか、そしてその情報を考慮して、MySQL クエリがどのようになる必要があるかを提案していただければ幸いです。上位 10 か所を選択します。

1 つ注意すべき点は、現時点では人気のある場所の最新性にはあまり関心がないということです。つまり、集計情報を見ることは問題なく、より最近のデータに重みを付ける必要はありません。

あなたの助けとアドバイスを前もってありがとう!

4

3 に答える 3

3

お気に入りの正確な式はあなたから得る必要があります。それを f(x) と呼びます。
実際の実装では、各行に f(x) を使用する夜間のcronジョブからあなたが言ったように、私が計算するpopular_scoreフィールドを追加します。

あとは単純に「地名を表から選んで人気度順」にするだけです。

わかりました - 試してみましょう Popular_score = (FAVORITE * 3 + COMPLETED * 2 + WISHLIST) * RATING * VIEW / AVG_VIEWS_OF_ALL_PROFILES

于 2010-04-25T02:59:32.387 に答える
1

物事をどのように評価するかについて、私は意見を持っていません。

とはいえ、場所テーブルに人気列を追加するだけではどうですか? 突然、SQL クエリが信じられないほど単純になります。

もちろん、難しいのは、その値をいつ、どのように更新するかを理解することです。ただし、すべてのアクティビティ データを保存しているため、ログ エントリからいつでも人気値を再生成できます。

そうすれば、「最も人気のある」場所のすてきな高速クエリを取得できます。また、人気度の計算方法を変更したい場合は、自由に変更できます。

頭が良ければ、人気をリアルタイムで追跡できるように、十分に単純な公式を考案できるかもしれません。たとえば、平均評価のみを気にする場合は、現在の平均評価、オブジェクトが評価された回数、新しい評価値の 3 つの変数だけで平均評価を変更できます。

もちろん、オブジェクトが表示、レビュー、お気に入りに追加された回数などを混ぜ始めると、事態はさらに複雑になります。ほぼすべてのアクションを重視します。

于 2010-04-25T03:00:09.317 に答える