2011-01-12 7 views
1

私はこのようなテーブルを持っている:php/mysql - ユーザーのランキングを取得するには?例えば

 
name rating 
matei  124 
andrei  20 
serj  25 
john  190 
mike  96 
andy  245 
tom  73 

私は出力に次のようなもの(数による順位を)必要があります。

ジョンの位置は2です。または、tomの位置は5です。 (私はすべての結果を取得する必要はありません)

どうすればいいですか?事前に

おかげ

+1

あなたの質問は何ですか?テーブルを照会する方法であれば、彼が持っている基本的なPHP/mySQLチュートリアル –

答えて

1
SELECT COUNT(*) + 1 
FROM users 
WHERE (rating, name) < 
     (
     SELECT rating, name 
     FROM users 
     WHERE name = 'john' 
     ) 

注だろう。

0

テーブルは、より正式に、データベースの文献でrelationsとして知られている - 彼らは(彼らは「タプル」のセットです)注文することが保証されていないので、あなたの質問には意味がありません。注文/ポジションに依存する必要がある場合は、その情報をキャプチャして保存するために追加の列(自動インクリメントID列など)を定義する必要があります。

2

ORDER BY句で順序を明示的に指定しない限り、クエリ結果の行の順序は一般的にMySQLによって保証されません。

SELECT count(1) as position 
FROM table 
WHERE order_column <= {john's order_column value}; 

あなたは注文の列を持っていない場合は、私が最初に定義することができお勧めします、「ジョンの位置」とし「何トムさん:あなたは、いくつかの個別の注文の列を持っている場合は、次のようなクエリを使用することができます位置 "を意味する。

UPDATE: AFAIU、あなたは格付け(申し訳ありませんが、私が最初にそれを取得していない)によってソートされたリスト内の位置を取得したいです。したがって、評価はあなたのorder_columnになります。この場合、2人の男の子の評価が同じであれば、ポジションはどのように計算されますか?

ので、クエリは次のように見えることがあります。

SELECT count(1) as position 
FROM table 
WHERE 
    rating > (SELECT rating FROM table WHERE id={user's ID}); 
+0

を見てみたいかもしれません。評価はです。 –

+0

はい、評価は、私はユーザの注文のランキングを取得する必要があります評価 – John

+0

初期の答えが更新されました。 – Kel

0

はそうのように動作しないオフセットでしょうか?

SELECT * FROM Table ORDER BY rating DESC LIMIT 1,6 

これは、6行で設定されていない1行を返しますか?または私は間違っています、構文は、名前と評価の両方に重複して持つことになります場合は、このクエリは、それらの両方に同じ格付けを付与することを

SELECT * FROM Table ORDER BY rating DESC LIMIT 1 , {{POS}} 
+0

見て、はい私はユーザーを評価することで注文する必要がありますが、私はexaple(ジョンのランキングは2)のために、すべてのユーザーではなく、特定のユーザーのランキングを受信する必要があります。 – John

関連する問題