给定一个投票表(用户投票选择,并且必须提供电子邮件地址):
id: int choice: int timestamp: timestamp ip: varchar email: varchar 考虑到他们每小时只能投票两次的限制,计算“唯一”投票(用户是电子邮件+ ip的唯一组合)的最佳方法是什么?
可以计算第一次投票与最后一次投票之间的小时数,并确定该时间范围内允许的最大投票数,但这可以使用户将所有投票压缩成一个小时的窗口,然后仍然进行计数。
我知道匿名在线投票本质上是有缺陷的,但是我不确定如何使用SQL进行此操作。我应该使用外部脚本还是其他?(对于每个选项,对于每个电子邮件+ IP对,进行投票,计算下一个+1小时时间戳,计数/丢弃/统计投票,继续进行下一个小时等)。
问题来源于stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
您可以重写insert语句,以仅允许基于您的约束插入选票:
Insert Into Votes (Choice, Timestamp, IP, Email) Select Top 1 @Choice, @Timestamp, @IP, @Email From Votes Where (Select Count(*) From Votes Where IP = @IP and Email = @Email and Timestamp > DateAdd(h, -2, GetDate())) < 3 您没有提到您使用的是哪种SQL语言,所以这是在SQL Server 2005中。