在评论投票中防止第二次投票

时间:2011-06-10 02:59:53

标签: php mysql

您好我有一个问题,一个方法可以阻止人们可以投票或投票评论的网站进行第二次投票。像Stackoverflow! :)

问题是我如何能够跟踪登录用户是否已经对评论进行了投票。让我们假设这是一个在线电子商务商店,对产品进行评论。这就是我的想法:

  • 所有评论数据都存储在名为“评论”的表格中
  • 字段名称:review_id,product_id,user_id,title,description,time_created,up_votes,down_votes,up_voters,down_voters
  • up_votes和down_votes包含投票或投票的票数
  • up_voters和down_voters包含使用user_id 1101,1102和1103的用户以1101.1102.1103格式向上或向下投票的人的user_id。

当一个人点击向上投票按钮时,系统将检查当前用户的user_id是否与up_voters中的任何人匹配。爆炸功能会将1101.1102.1103变成一个数组,而in_array()将用于检查用户是否已经投票。

还有更好的方法吗?

1 个答案:

答案 0 :(得分:5)

那张桌子会给你带来噩梦。想想有1K up_voters的热门产品,你的领域将是10K * 4个字符长!不仅如此,它还会妨碍您制作报告和研究数据的能力等。

我不太了解您的需求,但从我在表中看到的内容,我建议如下。

review
user_id, product_id, type_of_vote, title, description, time_created

使用上表并使用user_id,product_id作为密钥

OR

review
review_id, product_id, title, description, time_created

vote
review_id, user_id, type_of_vote

为此设计表有多种方法。如果是Operational Data Store(ODS),那么您可能需要normalize您的设计。如果它是仓库,那么您可以考虑我上面提到的第一个表。