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

テーブルが大きくなると永遠にかかるので、2つのテーブルを互いに結合することは避けたいと思います。他に何か提案はありますか?

4

1 に答える 1

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
于 2013-02-27T08:58:37.863 に答える