正在开发积分系统!其中有一项数据是显示用户积分排名?
一下子想不到太好的办法!最简的情况是统一某一字段的积分数据排名?比如积分字段,里面存的整数!如何排名?或者说如何获得他在排序中的序列位次呢?还有没有其他的排名计算办法或机制呢?做过这方面的朋友给指点下?

解决方案 »

  1.   

    Order By 积分字段 DESC
    第几个就是第几名
      

  2.   

    简如现在有积分字段
    现在添加一个字段,保存排名信息
    如保用PHP或SQL自动将生成排名信息?如果没有排名字段,给一个用户uid,如何获得排名?
      

  3.   

    首先用户表中应该有一个“积分总数”字段,如果不需要实时效果的话,可以在用户表中加一个“积分排名”字段,然后编一个每天定时计算排名的存储过程,更新用户名次,就像CSDN现在的技术分排名就是非实时的。如果要实时,可以select count(1) from 用户表 where 积分总数>张三的积分数 or (积分总数=张三的积分数 and 用户编号<=张三的用户编号)这也相当于
    order by 积分总数 desc,用户编号 asc
      

  4.   

    那个只是简单的排序。算第几也不难select count(*) + 1 from `table` where rank > (select rank from `table` where id = *)
      

  5.   

    使用“用户变量”
    set @xh=0
    select @xh:=@xh+1 as 排名, sum(积分字段) from 表 group by 用户 order by 用户
      

  6.   


    老大,这个什么意思如果我想定时更新所有用户的排名序:PHP或mysql有什么简洁的办法?
      

  7.   


    1、要么在需要显示积分排名的时候,重新计算积分排名
    数据库设计好的话,直接order by 积分应该就知道排名情况了;
    2、要么你在UPDATE积分的时候就计算排名;
    3、要么定时后台计算积分排名;
      

  8.   

    如果实时性要求不高的话,可以在读取积分排名的时候,order by 积分;如果有设置字段积分排名的话,可以选择2,3,要不要设置这个字段,主要还是看你对系统的要求,比如积分名次需要经常被查询并应用于其他地方的查询等。
      

  9.   

    一般来说大数据量的排名都是定期计算,就像alexa网站排名,都是多少时间计算一次。相关的SQL语句可以参考: http://club.okbase.net/task/item/160