3

MYSQL でベイジアン評価システムの設定を開始する方法を理解しようとしています。私は 5 つ星の評価を使用していませんが、同様の評価を使用しています。私のは5ボリュームバーになります。

これは私のアルバムページです。ユーザーはアルバムを評価する代わりに、平均してアルバムの評価になる曲を評価します。

  • $songsum
  • $songavg
  • $numofrated
  • $totalsongs
  • $albumrating
  1. $songsum / $numofrated = $songavg
  2. $songavg * ($numofrated / $totalsongs) = $albumrating

別のページ(アーティストページ)も評価されます。

$avg_num_votes  = 18;  // Average number of votes in all products
$avg_rating     = 3.7; // Average rating for all products
$this_num_votes = 6;   // Number of votes for this product
$this_rating    = 4;   // Rating for this product

$bayesian_rating =
    ( ($avg_num_votes * $avg_rating) + ($this_num_votes * this_rating) )
  / ($avg_num_votes + $this_num_votes);

これを設定するにはどうすればよいですか?$this_ratingアルバムと同じテーブルにある必要がありますか?


追加情報

  • MYSQL のテーブル: アルバム、曲、ジャンル、ソロ、グループ
  • すでに外部キーリンケージがあります
4

1 に答える 1

1

レーティング スキームに関する最初のアイデアは変更される可能性が高いため (特にアルバムの場合)、いつでもすべてを再計算できるトランザクション情報を保存することをお勧めします。

「Songs」と「Users」をキーとする「Ratings」という新しいテーブルを作成します。

  • ID
  • song_id
  • (アルバム_id)
  • ユーザーID
  • 評価

song_id があるので、album_id は必要ありませんが、時間を節約でき、ディスク容量も安くなります。

次のフィールドをデータベースに追加します。

  • song.summary_votes
  • song.summary_average
  • album.summary_votes
  • album.summary_average

summary_ フィールドを希望どおりに更新するスクリプトを定期的に実行します。

于 2012-05-24T22:25:02.443 に答える