mysql排序表并获取行位置mysql

时间:2013-07-07 06:26:14

标签: php mysql sql

对于表Player

,我有以下表结构
Table Player {  
Long playerID;  
Long points;  
Long rank;  
}

假设playerID和积分有有效值,我可以根据单个查询中的积分数更新所有玩家的等级吗?如果两个人拥有相同数量的积分,他们应该为排名配合。

更新

我正在使用建议作为本机查询的查询来使用hibernate。 Hibernate不喜欢使用变量,特别是':'。有谁知道任何变通方法?通过不使用变量或在这种情况下使用HQL解决hibernate的限制?

2 个答案:

答案 0 :(得分:1)

//为每个结果行增加num一个@num:=带有别名位置的@ num + 1并最初定义为0,或者想要成为什么..

select @num:=@num+1 position,
  id, 
  sum(item_1+item_2+item_3) as item_sum 
  from yourtable,(SELECT @num:=0) r
group by id 
order by item_sum desc;

答案 1 :(得分:0)

select  @a:=@a+1 position,
      id, 
      sum(item_1+item_2+item_3) as item_sum 
 from yourtable , (SELECT @a:= 0) AS a
 group by id 
 order by item_sum desc;

你也可以试试这个

SET @position=0;
SELECT   @position:= @position+1 AS position,   
          id, 
          sum(item_1+item_2+item_3) as item_sum 
     from yourtable
     group by id 
     order by item_sum desc;

或试试这个.......

SELECT @rn:=@rn+1 AS position, item_sum , id
FROM (
  select 
      id, 
      sum(item_1+item_2+item_3) as item_sum 
 from yourtable 
 group by id 
 order by item_sum desc
) t1, (SELECT @rn:=0) t2;