如何构建评论评分数据库?
问题描述:
我知道这篇文章,但我觉得我的问题稍有不同,也不那么复杂。如何构建评论评分数据库?
MySQL rating database structure
如果我有五十种不同的项目,我想打一个评级数据库对这些项目是仅仅拥有一个id列,得分列的问题?
因此,每次输入新评级时,项目的ID和评级都会在数据库中创建一个新行。
然后,当我想要查询单个项目的结果时,我只需查询"WHERE id =xyz "
,然后对评分进行平均或做我需要的任何项目。
随着时间的推移,我只会得到一个巨大的数据库的Id和评级我猜这似乎有点草率,但给每个项目和单个列等显然是巨大的矫枉过正。
或者,有没有更好的方法,我失踪或我不考虑其他事情?
答
您可能需要一个rater
列,以便同一个人无法提交多个评分。如果您不打算使用登录,则可以使用保存在cookie中的随机字符串。当有人试图提交评分时,您会检查cookie。如果Cookie存在,您可能会覆盖原有评分或拒绝重新评分,但您希望处理该评分。如果它不存在,则生成随机字符串并将其保存在cookie中。
如果您不需要跟踪每个单独的评分,那么您可以在每个项目表中只用两列来完成。列将是avg_rating
和num_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
非常好的谢谢。如果我决定筛选评分者,你最喜欢的方法是什么? $ _SERVER ['REMOTE_ADDR']或类似的东西?会话ID似乎可能会受挫。 – absentx 2013-05-10 19:30:40
为防止阻止,您需要登录,但阻止同一用户创建多个帐户将会很困难。会话ID是无用的,因为会话只会持续几分钟。如果没有登录,您可以使用cookie,但可以清除cookie。 – Barmar 2013-05-10 19:40:11
不幸的是,这个系统登录会太多......我们希望用户能够非常轻松地评分。我认为一个cookie会很好,即使我能做的最好的做法是将其限制为每个浏览会话一个评级,这对于该系统来说可能更好。 – absentx 2013-05-10 20:01:04