【问题标题】:PHP/MySQL: Rating system - Sum each user vote or update general votes table?PHP/MySQL:评级系统 - 汇总每个用户的投票或更新一般投票表?
【发布时间】:2011-03-24 12:16:54
【问题描述】:

每个用户每个项目可以投票一次(只有注册用户可以投票)。所以我有一个用户投票表,其中包括用户 ID、投票项目 ID 和投票值(从 1 到 10)。

我需要显示每个项目的总票数和评分,因此我想知道什么是最好的:从 user_votes 表中获取该项目的所有票数,或者每次用户在一般投票表中投票时保存投票,并且然后从该数据库中获取该字段?

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    要考虑的一个因素是您将看到多少票。如果我们谈论的是数量级的巨大(比如数十万个项目中的每一个都有超过数万张选票),那么存储每张选票最终可能会使用比其价值更多的资源。

    另一方面,如果投票数量相当少(比如几百个项目中的每一个都少于几百条记录),那么存储每个投票可能是有利的,因为它可以提供额外的灵活性未来的发展。一个月后,您可能会想出一些新的东西来处理这些信息,而积压的投票可能会非常有助于调整该信息的工作方式。

    正如其他人所提到的,这可以很容易地与元表结合使用,以便更轻松地对事物进行排序并简化查询。就个人而言,我会为这种类型的事情推荐 view,因为这样做会通过自动更新包含派生数据的字段来减少您的开销。

    【讨论】:

      【解决方案2】:

      您应该将计算出的评分值保存在项目表中,这样您就可以按评分等对项目进行排序。这会容易得多。

      【讨论】:

      • 重新阅读答案后,我不同意。存储值意味着更新以与现有数据保持同步 - 赞成和/或投票。这个答案也提倡重复的、冗余的数据——可以使用聚合函数(COUNT 或 SUM,取决于需要)检索。
      • 是的,有时您需要冗余数据来快速执行复杂的查询。惊喜?
      【解决方案3】:

      如果您只是增加一个总和,您将无法防止同一用户重复投票。

      您可以将两者结合使用。保留一个表格,列出所有投票和 user_id/ip 地址,以验证他们尚未投票,并保留与该项目相关的总和以避免查询投票表。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-18
        • 1970-01-01
        相关资源
        最近更新 更多