2013-02-27 91 views
0

我有命中为各种用户的表:查询获得分组项目排名?

HITS: 
id | userid 
1 | 1  
2 | 1  
3 | 2  
4 | 1  
5 | 2  
6 | 2  

我想最快的方式来获得这些物品通过ID排名列表。所以这个:

HITS RANKED: 
id | userid | ranks 
1 | 1  | 1 
2 | 1  | 2 
3 | 2  | 1 
4 | 1  | 3 
5 | 2  | 2 
6 | 2  | 3 

我想避免将两个表连接到对方,当表获得大这需要永远。还有其他建议吗?

+0

什么ü由ID等级是什么意思? – DevT 2013-02-27 08:52:03

+0

我认为排序可能会更有意义吗?基本上,用户ID为1的用户名为1,用户1的用户名为2,用户3的用户名为2,用户名为3。 – supercoder 2013-02-27 08:57:49

+0

也许每个分组的排序顺序可能会使更多sensE? – supercoder 2013-02-27 08:58:09

回答

1
SELECT ID, 
     UserID, 
     Ranks 
FROM 
    (
     SELECT id, 
       userid, 
       @group:=CASE WHEN @temp <> userid THEN 1 ELSE @group+1 END AS ranks, 
       @temp:=userid AS clset 
     FROM (SELECT @group:= 0) s, 
       (SELECT @temp:= 0) c, 
       (SELECT * FROM hits ORDER BY userid, id) t 
    ) x 
ORDER BY ID