当前位置: 代码迷 >> Sql Server >> 小弟我就是想实现的目的,一个用户如果在5分钟内登陆了3次,则吧这个账号锁定45分钟。45分钟后自动解锁。
  详细解决方案

小弟我就是想实现的目的,一个用户如果在5分钟内登陆了3次,则吧这个账号锁定45分钟。45分钟后自动解锁。

热度:146   发布时间:2016-04-27 14:54:21.0
我就是想实现的目的,一个用户如果在5分钟内登陆了3次,则吧这个账号锁定45分钟。45分钟后自动解锁。。
比如我一个如下数据库,有表table1和table2

其中table1的结构如下:
table1记录了用户的登陆时间,和登陆的ID。

time_sj class

2011-12-08 17:01:00 1  
2011-12-08 17:02:00 2  
2011-12-08 17:11:00 3  
2011-12-08 17:11:00 3  
2011-12-08 17:11:00 2  
2011-12-08 17:14:00 2 
2011-12-08 17:17:00 2 
2011-12-08 17:19:00 2 

其中class代表不同的用户。



table2
table2记录了用户名称、登陆的ID和是否锁定状态(0为没有锁定,1为锁定状态。)


username class shuo ssj  
xiaoxiao1 1 0 锁定时间
xiaoxiao2 2 0 锁定时间
xiaoxiao3 3 0 锁定时间

其中class代表不同的用户。

如何判断出在N分钟内,某个用户登陆了几次。

比如判断class=2的用户在5分钟内登陆了多少次,改怎么写sql?

如果登录的次数超过3次,则把shuo这个字段对应的0变成1。
然后在45分钟内,自动把变成1的转变成0;

接着,如果在五分钟内登陆了3次,则把0转换成1.

如此自动循环下去。



我就是想实现的目的,一个用户如果在5分钟内登陆了3次,则吧这个账号锁定45分钟。45分钟后自动解锁。。

------解决方案--------------------
SQL code
-- 5分钟内登陆了3次的 select classfrom table1 awhere (select count(*)from table1 b where a.class=b.class and b.time_sj between dateadd(mi,-5,a.time_sj) and a.time_sj)>=3-- 吧这个账号锁定45分钟update table2 set shuo=1,ssj=getdate()where class in(select classfrom table1 awhere (select count(*)from table1 b where a.class=b.class and b.time_sj between dateadd(mi,-5,a.time_sj) and a.time_sj)>=3)
  相关解决方案