为何我又偏偏喜欢你签到够天数却领不到财富?

获取连续登陆天数,连续签到天数 ,方法优化 - 地菜 - 博客园
& & & & &&获取连续登陆天数,连续签到天数,类似这样的需求应该是一个常见的需求,那么我们有没有一套成熟的解决方案呢 ?下面我来跟大家分享一下我的故事。
在猴年马月的一天,有个用户反馈个人中心打开缓慢,需要7、8秒,做为一个认真负责任的程序员GG,我尼玛放下手中的其他工作,跟踪调查并且解决该问题。
第一步重现问题:
  连着登陆了好几个账号到个人中心,打开都不慢呀 ,那是什么问题呢,就你一个人出问题,是你人品差吧,正当打算以此敷衍用户的时候,测试组的小陶说,他也遇到了这个问题,纳尼 !!你个人品差的家伙 ,让俺来看看,你要重现不了,看我不打死你。 于是他登陆账号试了一下,果然是有些缓慢,大概在4、5秒的样子,嗯,至此,这个问题重现成功了 。嗯,厉害 。
第二步查找问题根本原因:
   总不是这两个人人品都差吧,经过一番严密的调查,问题最终锁定在获取连续签到次数上,别问我怎么查到的,因为这两个奇葩居然做到连续签到近100天的牛逼战绩,然后获取连续签到的存储过程采用的循环算法是连续登陆天数越多,算法复杂度就越高。下面贴存储过程代码:
--循环法declare @day int
2 @userId int =1,
3 @count int = 0 ,
--连续签到多少天
4 @isSinginToday int
--今天是否签到
exists ( select * from
#SignInLog
where UserId
= @UserId and DATEDIFF(day ,createtime
,getdate() ) = @day
set @count = @count + 1
-- 【循环方法】
set @day = @day + 1
13 select @isSinginToday =COUNT(*)
#SignInLog
where UserId
and DATEDIFF(day ,createtime ,getdate() ) = 0
--今天是否登录
@isSinginToday , --当天是否签到
17 @count + @isSinginToday
-- 连续签到n天
把表结构也贴出来吧&,省得你们这些懒人造数据麻烦,检验代码麻烦
--用户签到日志表
create table #SignInLog (
CreateTime
datetime )--签到时间
insert into #SignInLog
可以看到这个存储过程采用循环的方法,去检查前一天是否签到,有的话继续查前一天,并把用于统计连续签到天数的计数器加一 ,前一天没有签到的话作为退出循环的条件,真是段思路清晰的好代码。但是随着连续次数的增多,select语句的执行次数也会增多,所以才会出现了那些连续签到天数多的人缓慢,连续签到天数少的人正常的情况 。 嗯....... 原因也找到了。喝杯茶压压惊先。
最后一步了,也是最难的,解决问题:
& &  这代码也没毛病,不换个思路的话,问题应该也得不到解决。正当我绞尽脑汁的时候,我有点想上厕所了,正当我上厕所的时候,灵感来了,(为了有意让灵感发生在洗手间,容易吗我)一个sql的函数映入我的眼帘,rownumber() &。于是最后给这个方法取的名字就叫rownumber法。看代码:
--【row_number 法 】
declare @now datetime
= getdate() ,
@count int ,
@userid int = 1 ,
@isSinginToday int
select @count
= count(*) from (
datediff( day
, CreateTime
--签到时间对比今天的差值
row_number() over (order by createtime
--排序字段
#SignInLog
where UserId
datediff( day , CreateTime , @now )
--条件排除今天的签到记录
) T where aa = bb
select @isSinginToday =COUNT(*)
#SignInLog
where UserId
and DATEDIFF(day ,createtime ,getdate() ) = 0
--今天是否登录
@isSinginToday , --当天是否签到
@count + @isSinginToday
-- 连续签到n天
& 这代码思路也算清晰的, 同学们,不知道你们看完这个故事,学到了没。CF重返战场免费领取回归礼包 签到指定天数领取相应奖励
这个活动是要求老玩家回归才可以参与的 不过小编发现老玩家是可以签到
但是不能领取回归礼包 只能参与签到领取装备
老玩家领取回归礼包:
签到就可以领取指定奖励:
活动地址:
本文地址:
∷相关文章∷
QQ会员吃喝玩乐 续费超级会员领30元大众点评无限制券
腾讯视频TV版云视听极光每日领取超级影视VIP 包括7天
微信白领俱乐部注册厚本金融即送2-50元微信红包 48小
∷热门栏目∷
∷热门文章∷
1中国政府网答题送流量 答对送300M三网
4免费百分之百领取CF翔龙大炮+M4A1轻骑
8最新100%领取100元手机话费+50Q币 小
10免费领取图书VIP方法并卡永久 怎样卡
∷相关文章∷
2微信关注【东楚晚报】下载APP百分之百
3关注康博手机数码连锁联通3G和电信用
6天天德州牌友召集令邀请最多获得秒到6
10【玩大了】为保险小伙伴加油,猛戳抽
如果网站信息侵犯您的隐私,请来信通知!E-Mail:jishuqqwang@您的位置:&>&&>&&>& > 你知道吗?在《全民超神》订阅号每天签到,除了每天得金币之外,累积天数还可以获得大量钻石奖励哦,那么累积签到30天可以获得多少钻石呢?
你知道吗?在《全民超神》订阅号每天签到,除了每天得金币之外,累积天数还可以获得大量钻石奖励哦,那么累积签到30天可以获得多少钻石呢?
时间:&&来源:&&作者:&&&&
你知道吗?在《全民超神》订阅号每天签到,除了每天得金币之外,累积天数还可以获得大量钻石奖励哦,那么累积签到30天可以获得多少钻石呢?(回复格式:moba+答案,比如你的答案是188,则回复moba188,以此类推。)不知道答案的话,点击公众号底部菜单【超神福利】-【签到有礼】去寻找吧~你知道吗?在《全民超神》订阅号每天签到,除了每天得金币之外,累积天数还可以获得大量钻石奖励哦,那么累积签到30天可以获得多少钻石呢?答案:moba208所以今天的全民超神每日一题答案就是moba208,小伙伴们都回答正确了么?(小编亲测答案可用哦,有图有证据!)如果大家不知道怎么参加每日答题可以看看下面的攻略,会对大家有帮助的!另外小编会每天给大家更新最新的每日一题答案,喜欢的小伙伴可不要错过了哦!
全民超神科技之神3v3怎么打?超级推土机科技之神的3v3攻略
全民超神暗影舞者5v5怎么打?杀敌于无形暗影舞者5v5攻略
全民超神极光女神5v5怎么打?冰封刺骨极光女神菲欧娜5v5攻略
全民超神沙漠死神5v5怎么打?强力团战辅助沙漠死神之5v5攻略
全民超神黑魔法之神PVE怎么搭配?黑魔法之神赫尔闯关PVE搭配技巧
全民超神灵狐公主怎么搭配?战士型ADC灵狐公主最佳团战阵容推荐
全民超神海鲨之王5V5怎么打?海鲨之王阿格尔5V5团战技巧攻略
全民超神如何通过宝石来加强狄安娜的战斗力?狄安娜宝石搭配技巧
全民超神红BUFF如何获得?红BUFF刷新时间详解
全民超神米娅怎么样?新英雄超神小师妹米娅评测
网游排行榜
类型:&卡牌&&仙侠&3D&Q版&平台:安卓

我要回帖

更多关于 为何我又偏偏喜欢你 的文章

 

随机推荐