Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP/MySQL:评级系统-汇总每个用户的投票或更新一般投票表?_Php_Mysql - Fatal编程技术网

PHP/MySQL:评级系统-汇总每个用户的投票或更新一般投票表?

PHP/MySQL:评级系统-汇总每个用户的投票或更新一般投票表?,php,mysql,Php,Mysql,每个用户可以对每个项目投票一次(只有注册用户才能投票)。因此,我有一个用户投票表,其中包括用户ID、投票项目ID和投票值(从1到10) 我需要显示每个项目的总投票数和评分,以便我想知道什么是最好的:从用户投票表中获取该项目的所有投票,或者每次用户在常规投票表中投票时保存投票,然后从该数据库中仅获取该字段?如果只增加一个总数,则无法防止重复投票同一个用户 你可以将两者结合使用。保留一个表,列出所有投票和用户id/ip地址,以验证他们是否已经投票,并保留与项目相关联的总和,以避免查询投票表。您应该将

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


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

如果只增加一个总数,则无法防止重复投票同一个用户


你可以将两者结合使用。保留一个表,列出所有投票和用户id/ip地址,以验证他们是否已经投票,并保留与项目相关联的总和,以避免查询投票表。

您应该将计算出的评分值保存在项目表中,所以你将有能力通过评级等来排序项目。这样会容易得多。

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

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


正如其他人所提到的,这可以很容易地与元表相结合,以便更容易地排序和简化查询。就我个人而言,我建议对这类问题使用一个新的解决方案,因为这样做会自动更新包含派生数据的字段,从而减少开销。

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