我知道这篇文章,但我觉得我的问题略有不同,而且不那么复杂。
MySQL rating database structure
如果我有五十个不同的项目并且我想为这些项目制作评级数据库,那么只需要有一个id列和一个得分列吗?
因此,每次输入新的评级时,项目的ID和评级都会在数据库中生成一个新行。
然后,当我想查询单个项目的结果时,我只需查询"WHERE id =xyz "
然后平均评分或做我需要做的任何事情。
随着时间的推移,我最终会得到一个庞大的Id和评级数据库,我觉得这似乎有点草率,但是给每个项目和个别专栏等显然是大量的矫枉过正。
或者,我有没有更好的方法或其他我不考虑的事情?
答案 0 :(得分:1)
您可能需要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