给定一张投票表(用户投票选择一个选项,并且必须提供一个电子邮件地址):
votes
--
id: int
choice: int
timestamp: timestamp
ip: varchar
email: varchar
考虑到他们每小时只能投票两次的限制,计算“唯一”选票(用户是电子邮件 + ip 的唯一组合)的最佳方法是什么?
可以计算第一次和最后一次投票之间的小时数,并确定该时间范围内允许的最大投票数,但这允许用户将所有投票压缩到一个小时长的窗口中,并且仍然计算它们。
我意识到匿名在线投票本质上是有缺陷的,但我不确定如何使用 SQL 来做到这一点。我应该使用外部脚本还是其他什么?(对于每个选择,对于每个电子邮件 + ip 对,获得投票,计算下一个 +1 小时时间戳,计数/丢弃/计票,继续下一个小时,等等......)