Mysql 如何构建评论评级数据库?

Mysql 如何构建评论评级数据库?,mysql,Mysql,我知道这篇文章,但我觉得我的问题有点不同,也不那么复杂 如果我有50个不同的项目,我想为这些项目建立一个评级数据库,这仅仅是一个id列和分数列的问题吗 因此,每次输入新评分时,项目id和评分都会在数据库中生成一个新行 然后,当我想查询单个项目的结果时,我只需查询“WHERE id=xyz”,然后对评分进行平均或对该项目执行任何需要执行的操作 随着时间的推移,我最终会得到一个庞大的Id和评级数据库,我想这似乎有点草率,但给出每个项目和单独的专栏等显然是大材小用 或者,是否有一个更好的方法,我错过

我知道这篇文章,但我觉得我的问题有点不同,也不那么复杂

如果我有50个不同的项目,我想为这些项目建立一个评级数据库,这仅仅是一个id列和分数列的问题吗

因此,每次输入新评分时,项目id和评分都会在数据库中生成一个新行

然后,当我想查询单个项目的结果时,我只需查询
“WHERE id=xyz”
,然后对评分进行平均或对该项目执行任何需要执行的操作

随着时间的推移,我最终会得到一个庞大的Id和评级数据库,我想这似乎有点草率,但给出每个项目和单独的专栏等显然是大材小用


或者,是否有一个更好的方法,我错过或其他事情,我没有考虑

您可能需要一个
rater
列,以便同一个人不能提交多个评级。如果您不打算使用登录,可以使用保存在cookie中的随机字符串。当有人试图提交评级时,您会检查cookie。如果cookie存在,您可以覆盖旧的评级,或者不允许重新评级,不管您希望如何处理它。如果不存在,则生成随机字符串并将其保存在cookie中

如果您不需要跟踪每个单独的评分,您可以在每个项目表中只使用两列来完成所有操作。列将是
avg_rating
num_ratings
。提交新评级时,您可以使用以下公式更新avergage评级:

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

您可能需要一个
rater
列,以便同一个人不能提交多个评级。如果您不打算使用登录,可以使用保存在cookie中的随机字符串。当有人试图提交评级时,您会检查cookie。如果cookie存在,您可以覆盖旧的评级,或者不允许重新评级,不管您希望如何处理它。如果不存在,则生成随机字符串并将其保存在cookie中

如果您不需要跟踪每个单独的评分,您可以在每个项目表中只使用两列来完成所有操作。列将是
avg_rating
num_ratings
。提交新评级时,您可以使用以下公式更新avergage评级:

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

非常好,谢谢。如果我决定筛选评分员,你最喜欢的方法是什么$_服务器['REMOTE_ADDR']或类似的东西?会话ID似乎可能被阻止。要防止被阻止,您需要登录,尽管阻止同一用户创建多个帐户会很困难。会话ID无效,因为会话只持续几分钟。如果没有登录,您可以使用cookies,但他们可以清除cookies。不幸的是,登录对于这个系统来说太多了……我们希望用户能够非常轻松地进行评分。我认为一个cookie就可以了,即使我能做的最好的事情是将它限制在每个浏览会话的一个等级,这对于这个系统来说是非常好的。更新了关于如何使用cookie跟踪评分者的答案。非常感谢。如果我决定筛选评分员,你最喜欢的方法是什么$_服务器['REMOTE_ADDR']或类似的东西?会话ID似乎可能被阻止。要防止被阻止,您需要登录,尽管阻止同一用户创建多个帐户会很困难。会话ID无效,因为会话只持续几分钟。如果没有登录,您可以使用cookies,但他们可以清除cookies。不幸的是,登录对于这个系统来说太多了……我们希望用户能够非常轻松地进行评分。我认为一个cookie就可以了,即使我能做的最好的事情是将它限制在每个浏览会话的一个等级,这对于这个系统来说是非常好的。更新了关于如何使用cookie跟踪评分者的答案。