2013-05-10 80 views
0

我知道這篇文章,但我覺得我的問題稍有不同,也不那麼複雜。如何構建評論評分數據庫?

MySQL rating database structure

如果我有五十種不同的項目,我想打一個評級數據庫對這些項目是僅僅擁有一個id列,得分列的問題?

因此,每次輸入新評級時,項目的ID和評級都會在數據庫中創建一個新行。

然後,當我想要查詢單個項目的結果時,我只需查詢"WHERE id =xyz ",然後對評分進行平均或做我需要的任何項目。

隨着時間的推移,我只會得到一個巨大的數據庫的Id和評級我猜這似乎有點草率,但給每個項目和單個列等顯然是巨大的矯枉過正。

或者,有沒有更好的方法,我失蹤或我不考慮其他事情?

回答

1

您可能需要一個rater列,以便同一個人無法提交多個評分。如果您不打算使用登錄,則可以使用保存在cookie中的隨機字符串。當有人試圖提交評分時,您會檢查cookie。如果Cookie存在,您可能會覆蓋原有評分或拒絕重新評分,但您希望處理該評分。如果它不存在,則生成隨機字符串並將其保存在cookie中。

如果您不需要跟蹤每個單獨的評分,那麼您可以在每個項目表中只用兩列來完成。列將是avg_ratingnum_ratings。提交新評級時,您可以使用以下公式更新行程評級:

UPDATE item_table 
SET avg_rating = @new_rating/(num_ratings+1) + avg_rating*(num_ratings/(num_ratings+1)), 
    num_ratings = num_ratings + 1 
WHERE item_id = @item 
+0

非常好的謝謝。如果我決定篩選評分者,你最喜歡的方法是什麼? $ _SERVER ['REMOTE_ADDR']或類似的東西?會話ID似乎可能會受挫。 – absentx 2013-05-10 19:30:40

+0

爲防止阻止,您需要登錄,但阻止同一用戶創建多個帳戶將會很困難。會話ID是無用的,因爲會話只會持續幾分鐘。如果沒有登錄,您可以使用cookie,但可以清除cookie。 – Barmar 2013-05-10 19:40:11

+0

不幸的是,這個系統登錄會太多......我們希望用戶能夠非常輕鬆地評分。我認爲一個cookie會很好,即使我能做的最好的做法是將其限制爲每個瀏覽會話一個評級,這對於該系統來說可能更好。 – absentx 2013-05-10 20:01:04