2010-12-08 14 views
3

USERテーブルはuserIdpointのフィールドを持っています。実行時に、特定のユーザーベースのランキングが何であるかを知りたい。これを達成する最良の方法は何ですか:
1:すべてのユーザーにリストを照会します。ポイントベースのリストベースをソートし、バイナリ検索を実行してそのユーザのランキングを見つけます。ここの悪い考えのように聞こえる。
2:データベースクエリを作成してこれらのタスクを実行できますか?ランキングシステムの良いデザインは何ですか

私は2000〜5000人のユーザーを期待しています。

+1

私はあなたがこれを再解釈する必要があると思います。あなたのシステムで「ランク」とは何を定義していますか? –

+0

@Peter:ランクは、ユーザーリストのユーザーエントリの「ポイント」による番号です。 – Vlad

+1

@Harry:おそらく 'select rn from(userからのrnとしてpoint descで順番にuserId、point、row_number()を選んでください)のようなものです。userId =" whatever ";'? (私はSQLの構文ではあまりよくありません) – Vlad

答えて

5
SET @rownum := 0; 

SELECT rank, userId, point 
FROM (
     SELECT @rownum := @rownum + 1 AS rank, userId, point 
     FROM user ORDER BY point DESC 
    ) 
as result WHERE userId = xxxxxxxx 
+0

ありがとう。あなたのコードから変数 'rank'をどのように計算するかについて私に少し説明してください。上記のコードは、それはmysqlの構文ですか?ちょうど私は 'SET @rownum:= 0;'を前に見ることはありません。 +1 –

+0

確かに、基本的には、ポイントの右に沿ってテーブルをソートしています。次に、各レコードの行番号を取得します。 '@ rownum'変数はまさにそれを行います。最後にあなたの特定のユーザーIDのレコードを取得します=) –

関連する問題