sql 排序根据日期循环滚动
这几天一直在做一个比赛投票的模块。由于以前没有做过这样正式的投票,一开始很多东西都没有考虑进去。直到现在投票功能开通了,还在改一些体现安全性与公平性的问题。说来确实有点汗颜~~
刚开始完成的,只是一个简单的投票功能,将IP写进数据库就好了。但在投票功能进入运营的第二天,网站上就出现了软件刷票的现象。这种情况对于一个以投票数量作为评选参考,甚至作为其中一个奖项的比赛而言,是相当有问题的。(之前还不知道有软件刷票这么一回事~~囧)于是,马上加了一个验证码的功能,以避免由于刷票引起的参赛者情绪白热化的情况出现。
可能是因为验证码的出现,以及评论的压力,刷票情况总算有所缓解。但紧接着,为了体现作品排序的公平性,如何让作品能在不同时间出现在各个位置上,又成了一个不可小觑的问题。以前看过阿里巴巴的一个投票系统,每次打开页面,参赛者的位置都会改变,但具体是怎么实现的却不得而知。于是听取技术总监的意见,将参赛作品分成几个批次,每一批的根据日期(星期几)的不同,在一周内滚动排序。具体的sql语句如下:
declare @weekday int;
set @weekday=(select datepart(w,getdate()));
select *, case when (OrderID-@weekday)<0 then ((OrderID-@weekday)+7) else (OrderID-@weekday) end as sortId from MHJWorks where WorksType=0 order by sortId
select datepart(w,getdate()) 用于获取当天为周几,注——星期天为1
case when (OrderID-@weekday)<0 then ((OrderID-@weekday)+7) else (OrderID-@weekday) end 模仿三目运算