2016-10-26 17:10:44 3025次浏览 3条回答 1 悬赏 100 金钱

想请教一下排行榜怎么弄,我现在做的项目有个需求,给用户投票,然后展示用户当前排名和上次排名(分日排行、周排行、月排行),也就是分别展示今日排名对比昨日排名、本周排名对比上周排名,本月排名对比上月排名
现在当前排行勉强弄出来了

//拿日排行举例 先查询表按照日投票字段排序并查询出来
$offset=$page*20;
$starsers=$model_starser->find()->where(['s_state'=>'1'])->orderBy("voteday DESC")->offset($offset)->limit(20)->asArray()->all();
//循环数据,再查每条数据出现在第几行
foreach ($starsers as $s => $starser) {
    $rownum=Yii::$app->db->createCommand('SELECT * FROM (SELECT s_id,(@rowNum:=@rowNum+1) AS rowNo FROM starser,(SELECT (@rowNum :=0) ) b ORDER BY voteday DESC) c WHERE s_id='.$starser['s_id'])->queryOne();
    $starsers[$s]['NO']=$rownum['rowNo '];
}
//这样数组里面的NO字段就是排名

但是不知道昨日排名怎么弄(有个投票记录表,字段有主键id、投票人id、被投票人id、投票时间),但是不知道怎么查询上面数组每条数据的上次排名怎么查询,有谁知道怎么弄么?请多指教啊~

  • 回答于 2016-10-27 09:11 举报

    在建一张表分别记录用户昨天、本周、本月的排名吧

    1 条回复
    回复于 2016-10-27 09:40 回复

    这样的话首先日排行,我就要定时任务每天把所有被投票人当天排名查出来,再把那个记录排行表里面的日排名修改掉,还要先查询判断被投票人是否存在记录,不存在要新添记录(后台会添加新的参与投票的人),感觉这样如果数据多的话太不好了。

  • 回答于 2016-10-27 22:26 举报

    把投票信息和排行数据按日存储,要一周就统计一周,要一月就统计一月。

    1 条回复
    回复于 2016-10-28 14:25 回复

    每天记录一下投票量和当天排名么?但是每周排名和每月排名 还是要统计一下总投票量并查一下排名啊
    现在我不会的就是怎么同时统计指定时间段的投票总量并查询排名~ 麻烦写一下具体的查询sql语句或model用法

  • 回答于 2016-10-31 16:48 举报

    用 strtotime() 函数吧,strtotime('last monday')得到上个周一的0:00:00,strtotime('last monday')-7243600 就是上周一的0:00:00.在这个时间段的投票就是上周的投票,再用 sql 的 between and 就行了啊.上月的也是同理.
    要注意strtotime('last monday')是上个周一的0点,如果今天是周二,他的意思是昨天0点.其实就是上周日的24点.

    1 条回复
    回复于 2016-10-31 17:01 回复

    首先多谢解答,可能是我没说清楚,我知道怎么统计指定时间段的投票总量,但不知道怎么‘同时’统计投票总量并排名,重点是把统计之后的总量进行排名,获取名次。

您需要登录后才可以回答。登录 | 立即注册
lzrqyc110
总监

lzrqyc110

注册时间:2016-01-02
最后登录:2018-12-28
在线时长:29小时34分
  • 粉丝37
  • 金钱4195
  • 威望40
  • 积分4885

热门问题