2013-05-10 42 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