2012-05-24 127 views
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:專輯,歌曲,風格,獨唱,
  • 集團
  • 已經有外鍵關聯
+1

您的問題未包含足夠的信息來回答它(恕我直言)。然而,根據您提出的問題提供的信息,我會說至少您應該將評分相關數據放入* same *數據庫。 – hakre

+0

嗯。還有什麼事情你需要知道?並感謝您的反饋。 – taeja87

+0

它似乎可能被認爲是一個重複的問題:http://stackoverflow.com/questions/6653215/bayesian-rating –

回答

1

你的評價方案的初步設想可能會改變(特別是對於專輯),因此您最好存儲交易信息,以便您隨時重新計算所有內容。

創建一個名爲新表 「評分」,關於 「詩經」 和 「用戶」 fkeys:

  • ID
  • song_id
  • (album_id)
  • USER_ID
  • 評級

album_id沒有必要,因爲你有song_id,但它會節省一些時間和磁盤空間是便宜

將以下字段添加到數據庫中:

  • song.summary_votes
  • song.summary_average
  • album.summary_votes
  • 專輯。summary_average

定期運行一個腳本,將summary_字段更新爲任何你想要的。