不要 select count(*) from xxx where score>?

解决方案 »

  1.   

    order by 
    1 使用mysql_fetch_array()从结果集取出数组 
    2 循环输出
    用到程序多一些
      

  2.   

    参考下贴中的多种方法http://blog.csdn.net/acmain_chm/article/details/4126306
    [征集]分组取最大N条记录方法征集,及散分...
      

  3.   


    我不需要分组,而且是查询某个用户的所在的排名。
    例如+----+------+
    | name |score|
    +----+
    |  aaa  | 95  |
    |  bbb | 94  |
    |  ccc | 93  |
    |  ddd | 92  |
    |  eee | 91  |
    +----+------+我想要查询ccc是排在第几位的
      

  4.   


    我不需要分组,而且是查询某个用户的所在的排名。
    例如+----+------+
    | name |score|
    +----+
    |  aaa  | 95  |
    |  bbb | 94  |
    |  ccc | 93  |
    |  ddd | 92  |
    |  eee | 91  |
    +----+------+我想要查询ccc是排在第几位的
    每个用户在表中对应多少条记录 ?
    如果表名为 : user_score    
    表结构为: us_id int(11) ,u_name ,u_score 
    (1)用户与记录关系 
    一对一 :  直接按照  u_score   倒序排序即可
    一对多 :多条需要使用 group by 分组并对 某个用户的分数就和  ,之后在倒序排序 (2)在查询结果中顺便添加个 序列  (名次)  select   (@i:=@i+1)   as   i,table_name.*   from   table_name,(select   @i:=0)   as   it 如果想要限制前几名 可以使用 top 关键字实现 ......希望对你有帮助 !
      

  5.   


    数据量稍微有点多,虽然score有索引,但是count需要去遍历,而且我们有一个抢的活动,到一定时间点,并发的访问量非常大。
      

  6.   


    我不需要分组,而且是查询某个用户的所在的排名。
    例如+----+------+
    | name |score|
    +----+
    |  aaa  | 95  |
    |  bbb | 94  |
    |  ccc | 93  |
    |  ddd | 92  |
    |  eee | 91  |
    +----+------+我想要查询ccc是排在第几位的
    每个用户在表中对应多少条记录 ?
    如果表名为 : user_score    
    表结构为: us_id int(11) ,u_name ,u_score 
    (1)用户与记录关系 
    一对一 :  直接按照  u_score   倒序排序即可
    一对多 :多条需要使用 group by 分组并对 某个用户的分数就和  ,之后在倒序排序 (2)在查询结果中顺便添加个 序列  (名次)  select   (@i:=@i+1)   as   i,table_name.*   from   table_name,(select   @i:=0)   as   it 如果想要限制前几名 可以使用 top 关键字实现 ......希望对你有帮助 !用户和记录是一对一,我只想取某个用户排在第几名。
      

  7.   

    如果楼主的用户量很大,而且用户同时在更新自己的积分数量,在高并发的情况下进行数据库查询效率将会极低。优化sql语句可能不能解决根本原因。可尝试在数据库前端架设缓存,在缓存中计算排名。下面这个帖子讨论了排名计算的算法。可参考。
    http://www.cnblogs.com/weidagang2046/archive/2012/03/01/massive-user-ranking.html