首先用户表中应该有一个“积分总数”字段,如果不需要实时效果的话,可以在用户表中加一个“积分排名”字段,然后编一个每天定时计算排名的存储过程,更新用户名次,就像CSDN现在的技术分排名就是非实时的。如果要实时,可以select count(1) from 用户表 where 积分总数>张三的积分数 or (积分总数=张三的积分数 and 用户编号<=张三的用户编号)这也相当于 order by 积分总数 desc,用户编号 asc
那个只是简单的排序。算第几也不难select count(*) + 1 from `table` where rank > (select rank from `table` where id = *)
使用“用户变量” set @xh=0 select @xh:=@xh+1 as 排名, sum(积分字段) from 表 group by 用户 order by 用户
老大,这个什么意思如果我想定时更新所有用户的排名序:PHP或mysql有什么简洁的办法?
1、要么在需要显示积分排名的时候,重新计算积分排名 数据库设计好的话,直接order by 积分应该就知道排名情况了; 2、要么你在UPDATE积分的时候就计算排名; 3、要么定时后台计算积分排名;
如果实时性要求不高的话,可以在读取积分排名的时候,order by 积分;如果有设置字段积分排名的话,可以选择2,3,要不要设置这个字段,主要还是看你对系统的要求,比如积分名次需要经常被查询并应用于其他地方的查询等。
第几个就是第几名
现在添加一个字段,保存排名信息
如保用PHP或SQL自动将生成排名信息?如果没有排名字段,给一个用户uid,如何获得排名?
order by 积分总数 desc,用户编号 asc
set @xh=0
select @xh:=@xh+1 as 排名, sum(积分字段) from 表 group by 用户 order by 用户
老大,这个什么意思如果我想定时更新所有用户的排名序:PHP或mysql有什么简洁的办法?
1、要么在需要显示积分排名的时候,重新计算积分排名
数据库设计好的话,直接order by 积分应该就知道排名情况了;
2、要么你在UPDATE积分的时候就计算排名;
3、要么定时后台计算积分排名;