开发者社区 问答 正文

SQL:使用每小时滚动投票限制计数唯一投票

给定一个投票表(用户投票选择,并且必须提供电子邮件地址):

votes

id: int choice: int timestamp: timestamp ip: varchar email: varchar 考虑到他们每小时只能投票两次的限制,计算“唯一”投票(用户是电子邮件+ ip的唯一组合)的最佳方法是什么?

可以计算第一次投票与最后一次投票之间的小时数,并确定该时间范围内允许的最大投票数,但这可以使用户将所有投票压缩成一个小时的窗口,然后仍然进行计数。

我知道匿名在线投票本质上是有缺陷的,但是我不确定如何使用SQL进行此操作。我应该使用外部脚本还是其他?(对于每个选项,对于每个电子邮件+ IP对,进行投票,计算下一个+1小时时间戳,计数/丢弃/统计投票,继续进行下一个小时等)。

问题来源于stack overflow

展开
收起
保持可爱mmm 2019-11-18 15:45:12 410 分享 版权
1 条回答
写回答
取消 提交回答
  • 您可以重写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中。

    2019-11-18 15:45:23
    赞同 展开评论
问答分类:
SQL
问答地址: